全局变量未初始化nodejs
我有两个JavaScript文件。为了简单起见,我创建了路由器,并且我想维护一个变量并在所有文件中更改其值,类似于Java的静态字段。但我想要初始化的变量不会初始化。全局变量未初始化nodejs
就像在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
方法将Vmessages中的数据作为http://localhost:3000/messages
。并且您可以使用post
方法使用http://localhost:3000/messages
将数据添加到Vmessages。您可以使用请求正文添加数据。希望这会有所帮助.....
非常感谢,你能解释我有什么错误,我不知道它是什么? –
我没有注意到在你的路线代码中使用快递。你没有使用express.Router()函数。 –
你无法从messages.js更新server.js中的变量。它根本不会那样工作。在服务器中,你设置变量,它保持在服务器中。你可以有一个单独的JSON文件,你更新,多数民众赞成在一个选项 – JordanHendrix