2017-08-28 16 views
0

私は2つのjavascriptファイルを持っています。わかりやすくするために、私はルータを作成しました。私は1つの変数を維持し、javaの静的フィールドに似た、すべてのファイルにわたってその値を変更したいと考えています。初期化したい変数は初期化されません。グローバル変数は初期化されませんnodejs

私はVmessages変数を持っています。他のファイルでその値を変更してserver.jsファイルの変更にアクセスできるように、javaの静的変数に似たものにしたいと思います。これは、だから私はserver.jsファイルVmessages変数をインポートし、messages.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ファイルです。以下のコードスニペットでわかるように、私は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ファイルを更新することができます。それは1つのオプションです – 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; 

node server.jsとしてserevrを実行しています。そして、getメソッドを使用して、http://localhost:3000/messagesというVmessagesのデータを取得できます。また、http://localhost:3000/messagesを使用してpostメソッドを使用してVmessagesにデータを追加することもできます。リクエスト本体を使用してデータを追加できます。これが役に立ったら.....

+1

ありがとうございました。私は間違いが何だったのか説明してください。 –

+0

あなたのルートコードでexpressの使い方に気付かなかった。そしてあなたはexpress.Router()関数を使わなかった。 –

関連する問題