Express 无法将app.local获取到路由文件

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

因此,在我的express.js 4.13.3中,在
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
。请参阅此处的类似问题和解决方案: