如何将 Express 响应对象传递给前端 JS 对象

2023-09-05前端开发问题
0

本文介绍了如何将 Express 响应对象传递给前端 JS 对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我的控制器正在通过 res.render 将 lat/lng 数据发送到我的 Handlebars 视图.

My controller is sending lat/lng data to my Handlebars view via res.render.

res.render('coords', viewModel);

'viewModel' 包含一个对象数组,每个对象都包含一个位置名称、lat 和 lng.我想在我的视图中获取这些信息并在 Google 地图上绘制标记.当我尝试通过 Handlebars 将数据注入内联 JS 变量时...

'viewModel' contains an array of objects, with each object containing a name of a location, lat, and lng. I want to take this information and plot markers on a Google map in my view. When I attempt to inject the data by way of Handlebars into an inline JS variable...

<script>
var viewMarkers = {{viewModel}};
console.log(viewMarkers);
</script>

我在控制台中得到了这个...

I get this in my console...

<script>
var viewMarkers = [object Object],[object Object];
console.log(viewMarkers);
</script>

我只是 Node/Express 领域的初学者,似乎无法理解如何将 viewModel 数据传递给前端的 Google maps JS.我的想法是我需要做一个 AJAX 请求来访问数据.无论如何,我已经搜索了互联网,但还没有遇到这样的例子,可以使用一些社区指导.

I'm only a beginner in the Node/Express realm and can't seem to comprehend how I can pass the viewModel data to the Google maps JS on the frontend. My thought is that I would need to do an AJAX request to access the data. Regardless, I've scoured the Internet, but have not come across an example of this yet and could use some community guidance.

感谢任何知识/帮助.

推荐答案

你必须记住 Handlebars 的工作是返回字符串.小胡子标签 {{}} 将对象引用评估为字符串,以便可以将结果文本附加到 DOM 或 HTTP 响应正文.<script> 标记中的 JavaScript 在到达客户端之前不会被执行.Handlebars 无法返回一个对象引用,该引用可以在服务器端渲染中存活并最终分配给客户端上的变量.

You must keep in mind that Handlebars' job is to return Strings. The mustache tags, {{}}, evaluate Object references as Strings so that the resultant text can be appended to the DOM or HTTP response body. The JavaScript inside your <script> tags does not get executed until it arrives on the client. There is no way for Handlebars to return an Object reference that could survive server-side rendering and eventually get assigned to a variable on the client.

[object Object],[object Object] 是两个 Object 的 Array 被字符串化后的结果(即,它是调用 console.log(String([{}, {}])); 在浏览器的控制台中.

[object Object],[object Object] is the result when an Array of two Objects is stringified (ie., it is the output of calling console.log(String([{}, {}])); in your browser's console.

为了向客户端提供 JavaScript 代码,您必须构造模板以返回带有有效 JavaScript 的字符串,这与典型模板返回有效 HTML 的方式非常相似.

In order to deliver JavaScript code to the client, you must construct your template to return a String with valid JavaScript in much the same way as a typical template returns valid HTML.

这样做的漫长过程如下:

The long way of doing this would be something like the following:

<script>
    var viewMarkers = [
        {{#each viewModel}}
            {
                location: '{{location}}',
                lat: {{lat}},
                lng: {{lng}}
            }
            {{#unless @last}},{{/unless}}
        {{/each}}
    ];
</script>

实现这一点的更简单方法是让 JSON.stringify 完成对数组进行字符串化的工作:

The simpler way of achieving this would be to have JSON.stringify do the work of stringifying your Array:

res.render('coords', { viewModel: JSON.stringify(viewModel) });

然后,要呈现 JavaScript,您只需在模板中执行以下操作:

Then to render the JavaScript you would need only do the following in your template:

var viewMarkers = {{{viewModel2}}};

请注意,我们必须使用三重胡须,以免 Handlerbars 引用 HTML-escaped.

Note that we must use triple mustaches in order not to have our quotes HTML-escaped by Handlerbars.

我创建了一个 fiddle 供您参考.

I have created a fiddle for your reference.

这篇关于如何将 Express 响应对象传递给前端 JS 对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

js删除数组中指定元素的5种方法
在JavaScript中,我们有多种方法可以删除数组中的指定元素。以下给出了5种常见的方法并提供了相应的代码示例: 1.使用splice()方法: let array = [0, 1, 2, 3, 4, 5];let index = array.indexOf(2);if (index -1) { array.splice(index, 1);}// array = [0,...
2024-11-22 前端开发问题
182

JavaScript小数运算出现多位的解决办法
在开发JS过程中,会经常遇到两个小数相运算的情况,但是运算结果却与预期不同,调试一下发现计算结果竟然有那么长一串尾巴。如下图所示: 产生原因: JavaScript对小数运算会先转成二进制,运算完毕再转回十进制,过程中会有丢失,不过不是所有的小数间运算会...
2024-10-18 前端开发问题
301

JavaScript(js)文件字符串中丢失"\"斜线的解决方法
问题描述: 在javascript中引用js代码,然后导致反斜杠丢失,发现字符串中的所有\信息丢失。比如在js中引用input type=text onkeyup=value=value.replace(/[^\d]/g,) ,结果导致正则表达式中的\丢失。 问题原因: 该字符串含有\,javascript对字符串进行了转...
2024-10-17 前端开发问题
437

layui中table列表 增加属性 edit="date",不生效怎么办?
如果你想在 layui 的 table 列表中增加 edit=date 属性但不生效,可能是以下问题导致的: 1. 缺少日期组件的初始化 如果想在表格中使用日期组件,需要在页面中引入 layui 的日期组件,并初始化: script type="text/javascript" src="/layui/layui.js"/scrip...
2024-06-11 前端开发问题
455

Rails/Javascript:如何将 rails 变量注入(非常)简单的 javascript
Rails/Javascript: How to inject rails variables into (very) simple javascript(Rails/Javascript:如何将 rails 变量注入(非常)简单的 javascript)...
2024-04-20 前端开发问题
5

Rails 3.1 ajax:成功处理
Rails 3.1 ajax:success handling(Rails 3.1 ajax:成功处理)...
2024-04-20 前端开发问题
11