无法获得app.local到路由文件

sle*_*vin 9 express

所以,在我的express.js 4.13.3中.,在app.js文件中我设置了一个app.localvar

app.set('multimedia', __dirname + '/public/multimedia');

然后在routes/settings.js我尝试访问那个var之类的

var app = require('../app');
var dir = app.get('multimedia');
Run Code Online (Sandbox Code Playgroud)

和我app.get is not a function.

我也试过var dir = app.get.multimedia;var dir = app.locals('multimedia');var dir = app.locals.multimedia;,仍然一无所获.

我在这里错过了什么?

谢谢

sha*_*024 2

required('../app')问题是你没有定义调用时要做什么。您应该使用module.exports如下所示的方法来执行此操作。尝试其中一种方法来解决此问题。

方法一:

将此行添加到app.js文件中。

module.exports = app;
Run Code Online (Sandbox Code Playgroud)

这只是说导出每当被调用apprequire('../app')。如果您require('routes/settings');在 中使用app.js,则该行应放在 之前require('routes/settings');,否则它将不起作用。

方法二:

//change the `routes/settings.js` like this
module.exports = function (app) {//notice that you pass the app to this
    //............     
    var dir = app.get('multimedia');
    console.log(dir);
    //............
}
Run Code Online (Sandbox Code Playgroud)

将此行添加到app.js

require('routes/settings')(app);
Run Code Online (Sandbox Code Playgroud)

现在您应该可以毫无问题地使用 app.get() 了。

例子:

//app.js
var express=require('express');

var app = express();

app.set('multimedia', __dirname + '/public/multimedia');

app.get('/',function(req,res){
  res.send('Hello World!');
});

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;
  console.log('Listening at http://%s:%s', host, port);
});

module.exports=app;

require('./settings');



//settings.js
var app= require('./app');

var dir = app.get('multimedia');

console.log(dir);
Run Code Online (Sandbox Code Playgroud)

有关 module.exports 的更多详细信息可以在此处找到