繁体   English   中英

全局变量未获取初始化的node.js

[英]Global variable doesn't get initialized nodejs

我有两个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方法将Vmessages中的数据作为http://localhost:3000/messages get 您可以使用post方法使用http://localhost:3000/messages将数据添加到Vmessages。 您可以使用请求正文添加数据。 希望这可以帮助.....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM