2016-11-22 43 views
0

我是express.js编码的新手。在我的代码中,我想访问两个URL,如http://localhost:3000http://localhost:3000/fetch,以使用get方法提供不同的请求。虽然访问第一个URL我能够得到响应,但访问第二个URL时,我得到404错误。我无法弄清楚这个问题,你能帮我解决这个问题吗?在expressjs代码中获取无效的URL消息

下面是我的文件:

app.js

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var index = require('./routes/index'); 
var fetch = require('./routes/fetch'); 

var app = express(); 


// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'pug'); 

app.use('/fetch',fetch); 
app.use('/', index); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('SmartBin: Invalid URL'); 
    err.status = 404; 
    next(err); 
}); 

modules.export=app; 

index.js

var express = require('express'); 

/* GET home page */ 
module.exports = (function() { 
    var path = require('path'); 
    var bodyParser = require('body-parser'); 
    var db = require('./dbclient'); 
    db.dbconnection(null,null,null,null,'smartbin',null); 
    var router = express.Router(); 
    router.get('/', function(req, res, next) { 
     //res.render('index', { title: 'Express' }); 
     db.get('devicereg',{}).then(function(v){ 
      //for (i=0; i<v.length-1; i++) 
       //res.json(v[i]); 
      res.json(v);//.end(); 
     }).catch(function(v){ 
      console.log('[SmartBin:Error ' + v); 
     });   
    }); 
    return router; 
})(); 

fetch.js

var express = require('express'); 

/* GET home page. */ 
module.exports = (function(){ 
    var path = require('path'); 
    var bodyParser = require('body-parser'); 
    var router = express.Router(); 
    var db = require('./dbclient'); 
    db.dbconnection(null,null,null,null,'smartbin',null); 
    router.get('/fetch', function(req, res, next) { 
      db.get('devicereg',{}).then(function(v){ 
       res.json(v); 
      }).catch(function(v) 
       {console.log('[SmartBin:Error ' + v);} 
      ); 
    }); 
    return router; 
})(); 

回答

0

我想你可以尝试以下选项之一:

1小的改动:

在你app.js使用app.use('/', index)app.use('/', 'fetch')。你的路由设置index.jsfetch.js文件里面,所以它应该工作,甚至在你app.js代码app.use('/fetch', 'fetch')没有。

在现有的代码,你可能可以访问http://localhost:3000/fetch/fetch(因为你是在声明app.js/fetch然后在fetch.js文件再次/fetch声明)。

2.通app通过参数设置为路由文件:

在你app.js,尝试代替app.use('/', index)app.use('/fetch', fetch)需要你的路线文件通过你的app实例。

如:

app.js

var express = require('express'); 
var app = express(); 

// Comment these lines 
//app.use('/fetch',fetch); 
//app.use('/', index); 

// Add this lines passing the instance of 'app' you've created 
var indexRoute = require('./routes/index')(app) 
var indexFetch = require('./routes/fetch')(app) 

在你的路线文件,尽量去适应,如下所示:

index.js

module.exports = function(app) { 
    app.get('/', function(req, res) { 
     res.send("This is index"); 
    }); 
} 

fetch

module.exports = function(app) { 
    app.get('/fetch', function(req, res) { 
     res.send("This is fetch"); 
    }); 
} 

希望它有帮助。