2016-07-14 13 views
0

私は自分の問題を検索しようとしましたが、質問する方法さえ知りませんでした。私は似たような質問をしましたが、何も見つかりませんでした。だからここに私の問題がある。Nodejs "予期しないトークン。"オブジェクトを作成するとき

私は2つのjsファイルを持っています。最初はconstant.jsで、HTTPフィールド名を保持します。ここでのコードスニペット

module.exports = { 
    USERNAME: 'username' 
}; 

は、第二のファイルがtest.jsであると私は、このファイルの中にいくつかのオブジェクトを作成したいです。私は以下のようにconstant.jsファイルのプロパティ名を使用したいオブジェクト作成中:

var constant = require('./constant'); 

var x = { 
    constant.USERNAME: "test" 
}; 

console.log(x); 

を私はtest.jsを実行すると、私は、コンソールで{ username: 'test' }を見ると期待が、私はこの次のエラーを得ました:

constant.USERNAME: "test" 
     ^
SyntaxError: Unexpected token . 
    at exports.runInThisContext (vm.js:73:16) 
    at Module._compile (module.js:443:25) 
    at Object.Module._extensions..js (module.js:478:10) 
    at Module.load (module.js:355:32) 
    at Function.Module._load (module.js:310:12) 
    at Function.Module.runMain (module.js:501:10) 
    at startup (node.js:129:16) 
    at node.js:814:3 

私はなぜそれが起こっているのかわかりません。なぜオブジェクトを作成できないのですか?どんな助けでも大歓迎です。

注:両方のファイルは同じフォルダにあります。モジュールのエクスポートエラーはありません。 console.log(constant)を試してみるとうまくいきます。

答えて

3

JSオブジェクトリテラル(x = { ... })は、name: valueペアで構成されnameはリテラルです(JSでは.が許可されていません)。ここで別の変数を使用することはできません。私はあなたが達成したいと思うものを達成、私はどうなるには:

x = {}; 
x[constant.USERNAME] = "test"; 
+0

ありがとうございます。それは私の問題を解決しました。 – orhankutlu

+0

素敵なもの....... –

3

リテラルオブジェクト表記の場合、プロパティ名は評価されません。さらに、constant.USERNAMEは無効なプロパティ名です。

あなたがプロパティ名としてconstant.USERNAMEの値を使用したい場合、あなたはこのように、「配列表記」を使用する必要があります。

var x = {}; 
x[constant.USERNAME] = 'test'; 
1

あなたは(nodejs 4以降でサポートされている)のECMAScript 2015からnew syntaxを使用する必要があり、次のいずれか

var x = { 
    [constant.USERNAME]: "test" 
}; 

や昔ながらにこだわります:

var x = {}; 
x[constant.USERNAME] = "test"; 
関連する問題