app.set和TypeError: app.get不是一个函数



使用express时我在server.js中设置端口,如下所示。

var express = require('express');
var app = express();
...
var port = process.env.PORT || 8080;
app.set('port', port);
...
module.exports = app;

但是当我试图在我的路由文件中访问它时,像下面这样…

// path to routes file is app/models, hence the '../../'
var app = require('../../server');
// default route
router.get('/', function (req, res) {
    res.send('Hello! The API is at http://localhost:' + app.get('port') + '/api');
});

…我得到以下错误:

TypeError: app.get is not a function

这到底是怎么回事?

好了,我终于弄明白了。在路由文件中没有正确设置app,因为我们之前在server.js中在require('./app/models/routes');之后做module.exports = app。所以只要我把应用程序的导出移到需要路由文件之前…一切工作!

我不知道到底发生了什么,我不知道你是否喜欢这个解决方案。我也遇到过类似的问题。

在主文件中,我做了类似 这样的操作
var express = require('express');
var app = express();
....
var routes = require("./routes/path")
routes(app);

在routes中我做了类似

在"。"文件/线路/路径:

module.exports = function(app){
   //I got access to app.locals
}

你看我走过快递应用。

routes基本上是一个以app为参数的函数。

我尝试了app.set("app", app),我认为这不起作用

看起来app没有被定义。你也可以试试这样做。

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

在你的GET、POST等路由处理中,你应该接收到'req'依赖项。App应该附属于这个,所以只要引用req.app:

router.get('/',function(req,res,next){
    console.log(app.get('secret'));
}

最新更新