Node.js 为什么页面处理程序中未设置request.app?
我只是想用nodejs和express构建一些CRUD应用程序。要删除应该保存数据的数据库,我只需在应用程序级别创建一个数组。然后我想在不同页面的处理程序中访问这个数组 现在的问题是,在调用处理程序时没有设置请求对象的属性app 下面是我使用的代码:Node.js 为什么页面处理程序中未设置request.app?,node.js,express,request,Node.js,Express,Request,我只是想用nodejs和express构建一些CRUD应用程序。要删除应该保存数据的数据库,我只需在应用程序级别创建一个数组。然后我想在不同页面的处理程序中访问这个数组 现在的问题是,在调用处理程序时没有设置请求对象的属性app 下面是我使用的代码: var express = require("express"); var morgan = require("morgan"); var app = express(); app.use(morgan("tiny")); app.loca
var express = require("express");
var morgan = require("morgan");
var app = express();
app.use(morgan("tiny"));
app.locals.dataStore = [{test: "bla"}];
app.get('/', (req, res) => {
res.json({
message: 'Behold The MEVN Stack!'
});
});
app.get('/data', (req, res) => {
console.log("request.app = " + JSON.stringify(req.app));
res.json("get data");
});
app.post('/data', (req, res) => {
console.log(req.body);
res.json("create data");
});
const port = process.env.PORT || 4000;
app.listen(port, () => {
console.log(`listening on ${port}`);
});
运行此代码并从浏览器调用该页面将生成此输出
listening on 4000
request.app = undefined
GET /data 200 10 - 8.572 ms
以下是有关我的系统的更多信息:
OS: Win10 64
Node: v12.13.0
Express: 4.17.1
因为我没有发现关于这个问题的其他问题,所以我认为我做错了什么。任何解决这个问题的暗示都会得到
非常感谢
问候
格雷戈
更新:
我听从亚历克西斯的建议,修改了密码。然而,它不起作用
新代码如下:
/// index.js
var express = require("express");
var morgan = require("morgan");
var app = express();
app.use(morgan("tiny"));
app.locals.dataStore = [{test: "bla"}];
app.get('/', (req, res) => {
res.json({
message: 'Behold The MEVN Stack!'
});
});
app.get('/data', (req, res) => {
console.log("request.app = " + JSON.stringify(req.app));
res.json("get data");
});
app.get('/test', require("./test.js"));
const port = process.env.PORT || 4000;
app.listen(port, () => {
console.log(`listening on ${port}`);
});
/// test.js
module.exports = function (req, res) {
console.log("test.request.app = " + JSON.stringify(req.app));
res.send("get test");
}
以及在我的浏览器中调用相应URL后的输出:
listening on 4000
test.request.app = undefined
GET /test 200 8 - 4.707 ms
GET /favicon.ico 404 150 - 1.358 ms
request.app = undefined
GET /data 304 - - 0.678 ms
为了访问
.app
,您必须创建一个模块,该模块只导出一个中间件函数,并在主文件中要求()它,如下所示:
// index.js
app.get('/data', require('./mymiddleware.js'))
// mymiddleware.js
module.exports = function (req, res) {
console.log("request.app = " + JSON.stringify(req.app));
res.json("get data");
}
是Express的官方文档吗?问题已经解决了,因为我可以使用正确/完整的属性路径“req.app.locals.dataStore”以两种方式访问全局数组 但问题仍然是: 为什么req.app在传递给JSON.stringify时显示为未定义 任何关于原因的提示都将不胜感激 非常感谢 问候
Gregor好的,但是创建和需要模块与只向app.get传递函数之间的真正区别是什么?我不确定,实际上,官方文档没有提到这方面的内容,所以我想这就是他们设计的API。就我所知,需要模块的过程,导出只是声明模块功能的定义格式。如果export设置为function,则require返回一个函数。或者还有其他的魔法吗?这是完全正确的,我真的不知道这是如何工作的,正如我之前所说的,我所知道的是,为了完成代码,你应该遵循这个模式。嗯。。。今天下午晚些时候我会按照你建议的方式来尝试,尽管我不明白这两种方式的区别。有点不满意,但非常感谢您的努力。