javascript - 全局变量未初始化nodejs

标签 javascript node.js routes

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

关于javascript - 全局变量未初始化nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45911550/

相关文章:

javascript - 单击文本框时如何自动取消选中复选框

node.js - Puppeteer 驱动的 headless chromium 在 Raspberry Pi 4 中立即关闭

php - Codeigniter子域路由

Javascript 使用函数访问其他类

routes - 处理多个 get 操作

css - 无法从路由加载 css

javascript - 响应延迟按钮事件 2 秒

javascript - async/await - 尝试...在 $.when 内捕获

javascript - 如何修复 flexbox 位置 :fixed navbar JS/CSS bug

node.js - Google 日历与 Node js 应用程序实时同步