我的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();
但是如何在路线文件中访问该应用程序?
答案 0 :(得分:5)
根据Express 4.x文档,您可以使用req.app
和res.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;
提示:
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) { //... });
...
})