【问题标题】:Global variable doesn't get initialized nodejs全局变量没有初始化nodejs
【发布时间】:2017-08-28 03:46:44
【问题描述】:

我有两个 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 文件中更改了它的值。正如您在下面的代码 sn-p 中看到的,我可以访问 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;

这是哪里弄错了?

【问题讨论】:

  • 您无法从 messages.js 更新 server.js 中的变量。它根本不是那样工作的。在服务器中设置变量,它在服务器中保持不变。你可以有一个单独的 JSON 文件来更新,这是一种选择

标签: javascript node.js routes


【解决方案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;

node server.js 运行serevr。您可以使用get 方法将Vmessages 中的数据作为http://localhost:3000/messages 获取。您可以使用http://localhost:3000/messages 使用post 方法将数据添加到Vmessages。您可以使用请求正文添加数据。希望这会有所帮助.....

【讨论】:

  • 非常感谢,你能解释一下我犯了什么错误吗,我不知道是什么错误?
  • 我没有注意到您的路线代码中使用了 express。而且你没有使用 express.Router() 函数。
猜你喜欢
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 1970-01-01
相关资源
最近更新 更多