app.get is not a function解决方案

在express4.x中app.js被申明为一个模块,而不是一个主程序入口,在文件的最后暴露出了这个模块,如下所示

app.js

module.exports = app;
但是我们在routes目录下的index.js文件中引用它却会出处,一下程序报: app.get is not a function
index.js

var app = require('../app');
var router = express.Router();
var photos = require('./photos');
/* GET home page. */
router.get('/', photos.list);
router.get('/upload', photos.form);
router.post('/upload', photos.submit(app.get('photos')));
module.exports = router;
原因在于,我们在app.js文件中先require()了index.js,这样在index.js加载的时候导致app模块还没暴露出来。

var index = require('./routes/index');
var users = require('./routes/users');
解决方案一:

在app.js中

var routes = require("./routes/index")
routes(app);
在index.js中

module.exports = function(app){
   //I got access to app.locals
}
解决方案二:把module.exports=app提前到require(./routes/'index')前面。

最佳解决方案:

使用req.app,它会引用当前正在使用这个中间件的express实例,也就是app了。

router.get('/', function (req, res) {
    var app =req.app;
    res.send('Hello! The API is at http://localhost:' + app.get("port") + '/api');
});






你可能感兴趣的:(node.js)