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

标签 javascript extjs node.js ejs

我正在尝试使客户端 javascript 可以访问一个变量(最终将替换为从数据库中选择的更复杂的 json)。我想在呈现页面而不是 ajax 调用时加载它,并且它不会通过像 ejs 这样的模板呈现(我想将数据传递给组合框的 extjs 存储)。所以我有一个标准的回应:

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

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

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

有什么想法吗?我想过也许可以通过 res.send() 编写整个 html 页面(它比上面的例子多了一些东西)但这似乎是一种解决方法,应该是显而易见的事情......

最佳答案

假设您在上面的问题中使用了相同的数组 foo,您可以通过以下几种方法来做到这一点。

这个使用 EJS 过滤器来编写数组文字:

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

这个将它编码为 JSON,稍后由您的客户端 javascript 解析:

<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 作为它的数据。如果没有,那么您可以先使用其 JSON 解析器,然后将其传递给局部变量。如果您没有使用 ExtJS,您可以使用它在客户端进行解析:https://github.com/douglascrockford/JSON-js

如果您选择将其编码为 JSON,这也会让以后切换回 AJAX 来检索数据变得更加容易。在某些情况下,这会有优势。该页面可以加载并显示一些数据,并在您正在为其加载数据的元素上显示一个忙碌的图标。

这并不是说在原始请求中包含所有数据本身就存在任何错误。只是坚持使用 JSON 可以让您在以后灵活选择。

关于javascript - res.render() 的目标中可用的 node.js javascript var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6324747/

相关文章:

node.js - 当我在服务器端更新模式时,中继/GraphQL 模式缓存不更新

javascript - 如何将变量插入到 <img> src 参数中?

javascript - 谷歌浏览器中的 ERR_CACHE_READ_FAILURE

extjs - 如何将对象数组转换为模型对象数组

javascript - ext js 中的组合框值

node.js - 修复 nodejs 和 mongodb 中的 retryWrites=false

javascript - 使网页等待加载以识别框架id

JavaScript 从服务器解析 JSON

gwt - 使用 GWT RPC 调用将数据加载到 Sencha GXT (3.0) ListStore 的简单示例?

javascript - 重试失败的 Mocha 测试