簡體   English   中英

將變量從javascript傳遞給ejs

[英]Pass a variable from javascript to ejs

我想使用在javascript文件中聲明的變量到ejs文件。

JavaScript的:

var express = require('express');
var app = express();

var myVar = 1;

在ejs文件中,我想在幾個if語句中使用該變量,我必須再次聲明它才能使用它。

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)
   .....

因為我說代碼運行正常。如果我在沒有添加第二個res.render('user_info.ejs)情況下運行它,我沒有收到任何錯誤。

那么,我可以有兩個res.render語句嗎?

app.locals.myVar方法應該可行,所以必須要app.locals.myVar某些事情。 但您可以完全避免使用app.locals.myVar 並將變量直接傳遞給您的視圖:

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');

否則它將無法工作。

這是一個關於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>
<% } %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM