2017-08-28 159 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()函數。 –