Javascriptファイルでejsファイルに宣言されている変数を使用したい。
javascript:
_var express = require('express');
var app = express();
var myVar = 1;
_
いくつかのifステートメント内でその変数を使用したいejsファイルで、それを使用できるようにするために、もう一度宣言する必要があります。
ejsファイル:
_var myVar = 1;
if ( my Var ) ....
_
どうすればこれを回避できますか?または、javascriptとejsの両方からアクセスできる構成ファイルを作成する方法はありますか?
私も使用しようとしました:
_app.locals.myVar = 1
_
ただし、ejsファイルでは未定義です。
-------更新--------------------------
私が使用しているコードでは:
_app.get('/', function (req, res) {
res.render('index', { user : req.user, message: [] });
});
_
app.localsを使用した後:
_app.get('/', function (req, res) {
res.render('index', { user : req.user, message: [] });
res.render('user_info.ejs');
_
});
コードは正常に実行されますが、次のように表示されます。
_ReferenceError: ....user_info.ejs:18
>> 18| height:60px;
user is not defined
at eval (eval at <anonymous> (...node_modules/ejs/lib/ejs.js:464:12), <anonymous>:20:12)
at returnedFn (...node_modules/ejs/lib/ejs.js:493:17)
at View.exports.renderFile [as engine] (.../node_modules/ejs/lib/ejs.js:350:31)
.....
_
コードは正常に実行されると言ったので、これは意味を成しません。2番目のres.render('user_info.ejs)
を追加せずに実行しても、エラーは発生しません。
では、2つのres.renderステートメントを使用できますか?
app.locals
を使用して変数を(EJS)テンプレートに公開する方法の非常に簡単な例を次に示します。
// app.js
var express = require('express');
var app = express();
var server = app.listen(3000);
app.locals.myVar = 1;
app.get('/', function(req, res) {
res.render('index.ejs');
});
// views/index.ejs
<% if (myVar) { %>
<h1>myVar is here!</h1>
<% } else { %>
<h1>Boohiss no myVar!</h1>
<% } %>
app.locals.myVar
アプローチは機能するはずなので、何かが邪魔になっているはずです。ただし、次の方法でapp.locals.myVar
を完全に使用せず、pass変数をビューに直接使用することを回避できます。
var express = require('express');
var app = express();
app.get('/', function(req, res) {
var myVar = 1;
res.render('testPage', { myVar : myVar });
});
これで、myVar
変数が「testPage」ejsファイルで使用できるようになります。その中であなたはすることができます:
<%= myVar %>
そして、それが「1」を出力するのを見てください。
最後に、ビューエンジンをejsに設定していることを確認してください。
app.set('view engine', 'ejs');
そうでなければ、それは機能しません。