Express.js 4:如何访问routes / index.js中的app.locals。<myvar>?

时间:2017-04-07 13:32:03

标签: javascript node.js express

我希望从我的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时在我的日志中输出 - &gt; 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);

谢谢。

1 个答案:

答案 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