我有两个 JavaScript 文件。为了简单起见,我创建了路由器,我想维护一个变量并在所有文件中更改它的值,类似于 java 的静态字段。但我想要初始化的变量没有得到初始化。
就像在 server.js 文件中一样,我有 Vmessages 变量,我想让它类似于 java 的 satic 变量,这样我就可以在另一个文件中更改它的值并访问 server.js 文件中的更改。这是server.js 文件,
//server.js file
var Vmessages = [{text: 'some text', owner: 'Tim'},{text: 'other message', owner: 'Jane'}];
app.get('/messages', (req, res) => {
res.json(Vmessages);
});
module.exports.variableName = Vmessages;
app.use(require('./routes/messages'));
所以我导入了 server.js 文件中的 Vmessages 变量并在 messages.js 文件中更改了它的值。正如您在下面的代码片段中看到的,我可以访问 server.js 文件的变量并进行更改。即使当我打印它时,它也会显示已进行更改。但是当我访问 server.js 文件中的 Vmessages 时,它的值没有改变并且处于初始值。
//messages.js file
var sourceFile = require('../server.js');
var messages = sourceFile.variableName;
router.post('/messages', (req, res) => {
console.log(sourceFile.variableName); //[{text: 'some text', owner: 'Tim'}]
messages.push({text: 'other message', owner: 'Jane'});
console.log(sourceFile.variableName); //[{text: 'some text', owner: 'Tim'},{text: 'other message', owner: 'Jane'}]
res.json(req.body);
})
module.exports = router;
我哪里搞错了?
最佳答案
@M.Ramzan 使用此代码。我对路线代码做了一些更改。这可以根据您的要求进行操作。这里是server.js
文件
var express = require('express');
var app = express();
var variableName;
var Vmessages = [{text: 'some text', owner: 'Tim'},{text: 'other message', owner: 'Jane'}];
app.get('/messages', (req, res) => {
res.json(Vmessages);
});
exports.variableName = Vmessages;
app.use(require('./routes/messages'));
app.listen(3000,function(){
console.log("Server listening on 3000");
});
这是messages.js
文件
//messages.js file
var express = require('express');
var bodyParser = require('body-parser');
var sourceFile = require('../server.js');
var app = express();
var messages = sourceFile.variableName;
var router = express.Router();
router.use(bodyParser.json());
router.post('/messages', (req, res) => {
console.log(sourceFile.variableName);
messages.push(req.body);
res.json(messages);
});
module.exports = router;
将 serevr 作为 node server.js
运行。您可以使用 get
方法以 http://localhost:3000/messages
形式获取 Vmessages 中的数据。您可以使用 post
方法使用 http://localhost:3000/messages
将数据添加到 Vmessages。您可以使用请求正文添加数据。希望这会有所帮助......
关于javascript - 全局变量未初始化nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45911550/