如何在路由器文件中获取应用程序(在Node / Express应用程序中)

时间:2015-07-09 12:19:03

标签: javascript node.js express

我的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声明它,我在路线中收到错误,因为app是undefined。如果我需要带有var app = require('../app')的路径文件中的应用,我会收到此错误:

  

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

我想通过

正确定义应用
var app = express();

但是如何在路线文件中访问该应用程序?

2 个答案:

答案 0 :(得分:5)

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

  

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

  • req.app
      

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

  • res.app
      

    res.app Request 对象中的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.js page.js 位于同一文件夹中。
  • 运行以下命令:node server.js
  • 访问网址:http://127.0.0.1:3000/test-route

答案 1 :(得分:2)

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

<强> app.js

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

<强>路由/ api.js

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