【问题标题】:How to get app in router files (in Node/Express app)如何在路由器文件中获取应用程序(在 Node/Express 应用程序中)
【发布时间】:2015-07-09 12:19:02
【问题描述】:

我的 app.js 看起来像这样:

app = express();
setup.configure(app);
//...more stuff (e.g. database setup, middleware definition, etc.)...
var api = require('./routes/api');
app.use('/api', api);
module.exports = app;

在 routes/api.js 中,我有这样的中间件路由:

router.get('/myroute',
    app.sessionMW,
    function (req, res, next) {
        //...
    });

JSLint 标记错误,因为我将 app 变量声明为全局变量。 如果我用var 声明它,我会在路由中收到错误,因为应用程序是undefined。如果我需要 var app = require('../app') 的路由文件中的应用程序,我会收到此错误:

错误:Route.get() 需要回调函数但得到了一个 [object 未定义]

我想通过这样做来正确定义应用程序

var app = express();

但是如何访问路由文件中的应用程序?

【问题讨论】:

标签: javascript node.js express


【解决方案1】:

根据 Express 4.x 文档,您可以使用 req.appres.app 通过请求和响应对象轻松访问应用程序对象

Express 应用程序对象可以从Request 对象中引用 和Response 对象分别为req.appres.app

  • req.app

    此属性包含对使用中间件的 Express 应用程序实例的引用。

  • res.app

    res.appRequest 对象中的 req.app 属性相同

代码示例:

server.js

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

var app = express();

app.set('firends', 'nodejs, python');

var page = require(path.join(
    __dirname,
    'page'
));
app.use('', page);

app.listen(3000);

page.js

var express = require('express');

var router = express.Router();
router.get('/test-route', function (req, res) {
    var app = req.app; // get app object
    res.send('firends are: ' + app.get('firends')); // get firends from app
});

module.exports = router;

提示:

  • server.jspage.js 在同一个文件夹中。
  • 使用命令运行:node server.js
  • 访问网址:http://127.0.0.1:3000/test-route

【讨论】:

    【解决方案2】:

    您可以在您的routes/api.js 文件中传递您的app 对象:

    app.js

    var api = require('./routes/api')(app); // pass 'app'
    

    routes/api.js

    module.exports = function(app) {     
      ...
      router.get('/myroute', app.sessionMW, function (req, res, next) { //... });
      ...      
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-31
      • 2017-04-24
      • 2012-09-17
      • 1970-01-01
      • 2021-04-07
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多