app.get在Node/Express中返回undefined

app.get returned undefined in Node/Express

本文关键字:返回 undefined Express get Node app      更新时间:2023-09-26

我在我的app.js中使用express,我设置了类似于的东西

var express = require('express');
var app = express();
app.set('myVar', 'hello');

然后在我的控制器中,我想得到这个值。我做

var express = require('express');
var app = express();
console.log(app.get('myVar')) // undefineded 

知道为什么吗?

您的控制器会创建一个全新的Express实例。如果您希望能够共享变量,您需要将实例从app.js传递给您的控制器:

// app.js
var express = require('express');
var app = express();
app.set('myVar', 'hello');
require('./controller')(app);
// controller.js
module.exports = function(app) {
  console.log(app.get('myVar'));
};

EDIT:根据评论判断,问题不在于传递app,而在于将应用程序的各个部分移动到不同的模块。启用的常见设置如下所示

// app.js
var express = require('express');
var app = express();
app.set('myVar', 'hello');
app.use('/api', require('./controller/auth'));
// controller/auth.js
var express = require('express');
var router  = express.Router();
router.get('/', function(req, res) {
  console.log(req.app.get('myVar'));
  return res.send('hello world');
});
module.exports = router;

在您的示例中,您正在实例化第二个app,然后尝试从中get值。您需要从完全相同的对象get

var express = require('express');
var app = express();
app.set('foo', 'bar');
app.get('foo');

如果您是express新手,可以使用cli生成器构建一个应用程序,该应用程序向您展示了如何在整个应用程序中使用同一express实例的合理模式。