我希望从我的routes / index.js文件中的app.js访问我自己的变量app.locals.port
。
app.js:
app.locals.port = 3001;
var index = require('./routes/index');
app.use('*', index); // use router in ./routers/index.js
路由/ index.js:
var app = require('../app');
console.log('app.locals.port: ' + app.locals.port);
运行npm start
时在我的日志中输出 - > nodemon -e css,ejs,js,json,html,pug ./bin/www
:
[nodemon] 1.11.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node ./bin/www`
app.locals.port: undefined
我目前的解决方法是使用全局:
app.js
global.port = 3001;
路由/ index.js
console.log('global.port: ' + global.port);
谢谢。
答案 0 :(得分:1)
您需要将app对象传递给routes / index.js。
因此,在 app.js 文件中,您可以使用以下内容:
const express = require('express')
const app = express()
app.locals.port = 3001
const index = require('./routes/index')(app)
app.use('*', index)
app.listen(app.locals.port, function() {
console.log('Server listening on ' + app.locals.port)
})
然后在 routes / index.js :
const express = require('express')
module.exports = function(app) {
const router = express.Router()
router.get('/', function(req, res) {
console.log(app.locals.port)
res.send('Hello from index.js!')
})
return router
}
routes / index.js中的app
变量将在module.exports函数的范围内可用,然后可以将其传递给文件中的其他函数。
正如您在评论中也提到的那样,app对象附加到每个请求,因此如果您只需要访问路径范围内的app对象,则可以简化代码。
<强> app.js 强>
const express = require('express')
const app = express()
app.locals.port = 3001
const index = require('./routes/index')
app.use('*', index)
app.listen(app.locals.port, function() {
console.log('Server listening on ' + app.locals.port)
})
<强>路由/ index.js 强>
const express = require('express')
const router = express.Router()
router.get('/', function(req, res) {
console.log(req.app.locals.port)
res.send('Hello from index.js!')
})
module.exports = router