所以,在我的express.js 4.13.3中。,在app.js文件中,我设置了一个app.local变量
app.set('multimedia', __dirname + '/public/multimedia');
然后在routes/settings.js中,我尝试访问这个变量,就像
var app = require('../app');
var dir = app.get('multimedia');我得到了app.get is not a function。
我也尝试过var dir = app.get.multimedia;、var dir = app.locals('multimedia');和var dir = app.locals.multimedia;,但仍然一无所获。
我在这里错过了什么?
谢谢
发布于 2015-12-15 20:36:02
问题是,当调用required('../app')时,您还没有定义该做什么。您应该使用module.exports进行此操作,如下所示。尝试这些方法中的一种来解决这个问题。
方法1:
将这一行添加到app.js文件中。
module.exports = app;这只需要在调用app时导出require('../app')。如果在require('routes/settings');中使用app.js,则应将该行放在require('routes/settings');之前,否则将无法工作。
方法2:
//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);
//............
}将这一行添加到app.js中
require('routes/settings')(app);现在,您应该能够使用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);有关module.exports的更多详细信息可以找到这里。
发布于 2015-12-22 15:56:20
在settings.js中
function settings(app) {
console.log(app);
// etc...
}
module.exports = settings;在app.js中:
var settings = require('./settings'),
express = require('express'),
app = express(),
server = require('http').createServer(app),
...
...
settings(app);基本上,您从要使用它们的地方导出函数,然后在app.js中要求这些文件。
样本项目:
server.js:
var settings= require('./settings'),
server = require('http');
settings(server);settings.js:
function settings(server) {
console.log("Hello");
console.log(server);
}
module.exports = settings;两个文件都在同一个文件夹中。要运行:节点服务器
结果:

https://stackoverflow.com/questions/34254744
复制相似问题