全局变量未获取初始化的node.js [英] Global variable doesn't get initialized nodejs

查看:203
本文介绍了全局变量未获取初始化的node.js的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个JavaScript文件。为简单起见,我创建了路由器,并希望维护一个变量并在所有文件中更改其值,类似于Java的静态字段。

I have two javascript files. For simplicity I have created routers and I want to maintain one variable and change its value across all files, something similar to java's static fields. but the variable I want to initialize doesn't get initialize.

就像server.js文件中一样,我有Vmessages变量,我想使其类似于Java的satic变量。因此我可以在另一个文件中更改其值,并访问server.js文件中的更改。这是server.js文件,

Like in the server.js file I have Vmessages variable I want to make it something similar to java's satic variable so I can change its value in another file and access the changes in server.js file. This is server.js file,

//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时,它的值没有改变,而是在它的初始值中。

So I have imported the server.js files Vmessages variable and change its value in messages.js file. As you can see in the code snippet below i can access the server.js file's variable and make changes. And even when I print it it shows changes are made. But when I access the Vmessages in server.js file its value didn't change and it was in its initial value.

//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 文件

@M.Ramzan use this code . I made some changes to routes code. This works as per your requirement. Here server.js file

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 方法以 http:// localhost:3000 / messages 的形式在Vmessages中获取数据。您可以使用 post 方法使用 http:// localhost:3000 / messages 将数据添加到Vmessages。您可以使用请求正文添加数据。希望这会有所帮助.....

Run the serevr as node server.js. And you can get the data in Vmessages as http://localhost:3000/messages using get method. And you can add data to Vmessages using http://localhost:3000/messages using post method. You can add data by using request body. Hope this helps.....

这篇关于全局变量未获取初始化的node.js的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆