2017-08-28 147 views
0

我有两个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; 

哪里错了?

+0

你无法从messages.js更新server.js中的变量。它根本不会那样工作。在服务器中,你设置变量,它保持在服务器中。你可以有一个单独的JSON文件,你更新,多数民众赞成在一个选项 – JordanHendrix

回答

1

@ 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。您可以使用请求正文添加数据。希望这会有所帮助.....

+1

非常感谢,你能解释我有什么错误,我不知道它是什么? –

+0

我没有注意到在你的路线代码中使用快递。你没有使用express.Router()函数。 –