node.js javascript var在res.render()的目标中可用

我试图做一个variables(最终被从数据库中select更复杂的JSON取代)可访问的客户端JavaScript。 我想加载它时,页面呈现,而不是一个Ajax调用,它不会通过模板像ejs(我想传递数据到一个combobox的extjs存储)呈现。 所以我有一个非常贴心的回应:

function (req, res) { res.render('index.html', {foo: ['a','b']}); } 

和一个空白的html页面我想访问foo:

 <!DOCTYPE html> <html> <head> <script type=text/javascript> console.log(foo); </script> </head> <body> </body> </html> 

有任何想法吗? 我想通过res.send()(这比上面的例子有更多的东西)编写整个HTML页面,但似乎这样的解决方法,应该是显而易见的做…

假设在上面的问题中相同的数组foo ,这里有几个方法可以做到这一点。

这一个使用EJSfilter来写一个数组文字:

 <script type="text/javascript"> var foo = ['<%=: foo | join:"', '" %>']; </script> 

这一个编码为JSON,以后由您的客户端JavaScriptparsing:

 <script type="text/javascript"> // note the "-" instead of "=" on the opening tag; it avoids escaping HTML entities var fooJSON = '<%-JSON.stringify(foo)%>'; </script> 

IIRC,ExtJS可以直接处理JSON作为其数据。 如果不是,那么你可以先使用它的JSONparsing器,然后把它交给一个局部variables。 如果你不使用ExtJS,你可以用它来parsing客户端: https : //github.com/douglascrockford/JSON-js

如果您select将其编码为JSON,则可以使其稍后切换回AJAX来检索数据。 在某些情况下,这将有一个优势。 该页面可能会加载和显示一些数据,以及正在加载数据的元素上的繁忙图标。

这并不是说在原始请求中包含所有的数据都会有内在的错误。 这只是坚持与JSON给你以后select的灵活性。

在EJS中以下应该工作

 <script type=text/javascript> console.log( <%= foo %>); </script> 

我build议不要dynamic生成JavaScript,因为它会打破问题的分离并强制JavaScript。

编辑:

原来上面的数组很好地工作。 所以简单地把你的数据编码成语义HTML。 然后用JavaScript来增强它。 如果JavaScript必须获取数据,然后将其存储在更加合理的地方,比如cookie,或者通过ajax检索。