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');
});






  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值