Express 无法将app.local获取到路由文件
因此,在我的express.js 4.13.3中,在Express 无法将app.local获取到路由文件,express,Express,因此,在我的express.js 4.13.3中,在app.js文件中,我设置了一个app.localvar app.set('multimedia','dirname+'/public/multimedia') 然后在routes/settings.js中,我尝试访问该变量 var app = require('../app'); var dir = app.get('multimedia'); 我得到了app.get不是一个函数 我还尝试了var dir=app.get.multimedi
app.js
文件中,我设置了一个app.local
var
app.set('multimedia','dirname+'/public/multimedia')代码>
然后在routes/settings.js
中,我尝试访问该变量
var app = require('../app');
var dir = app.get('multimedia');
我得到了app.get不是一个函数
我还尝试了var dir=app.get.multimedia代码>和var dir=app.locals('multimedia')代码>和var dir=app.locals.multimedia代码>还是什么都没有
我错过了什么
谢谢问题在于,当调用required(“../app”)
时,您尚未定义要执行的操作。您应该使用module.exports执行此操作,如下所示。尝试以下方法之一来解决此问题
方法1:
//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
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);
将此行添加到app.js
文件中
module.exports = app;
这只是说在调用require('../app')
时导出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
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);
将此行添加到app.js
require('routes/settings')(app);
现在您应该可以毫无问题地使用app.get()
示例:
//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
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的更多详细信息,请参见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;
两个文件位于同一文件夹中。
要运行:节点服务器
结果:
当我看到可以像这样访问模板中的本地var时,我想到了整个想法。那么你是说在javascript代码中没有更简单的方法来获取本地代码,比如app.set
,然后在另一个文件中,app.get
?无论如何,我现在会测试你的方法并让你知道。我做了你说的一切,我得到require(…)不是控制台中的一个函数require('./routes/settings')(应用程序)代码>在app.js
中。请注意,我在settings.js路径中发布的版本是exports.poster=function(app){return function(req,res){var dir=app.get('multimedia');console.log(dir);}}
当然它会引发异常,因为您应该将app
参数传递给module.exports
函数,但它不存在于settings.js
中。如果要使用方法2,请将exports.poster
更改为module.exports
。请参阅此处的类似问题和解决方案: