将数组从异步函数节点 js 发送到 html

Posted

技术标签:

【中文标题】将数组从异步函数节点 js 发送到 html【英文标题】:Send array from async function node js to html 【发布时间】:2022-01-03 22:34:05 【问题描述】:

我正在尝试将一个 js 数组从我的节点 js 后端发送到我的 html,但 HTML 中的对象是一个 Promise 对象,我怎样才能正确发送该数组?

我收到此错误 =

Uncaught SyntaxError: Unexpected identifier

console.log([object Promise]);

后端:

 const path = require('path');
 const fs = require("fs");
 const host = "127.0.0.1";
 const port = 1337;
 const express = require("express");
 const ejs =  require("ejs");


const server = express();
server.use(express.static(path.join(__dirname, 'public')));
server.use(express.static(path.join(__dirname + '/js')));//middleware
server.use(express(__dirname)); 
server.set('view engine','html');
server.engine('html', require('ejs').renderFile);

server.get("*", function(request, response) 
 response.render('index.html', obj: productArr);
);
const Shopify = require('shopify-api-node');

const shopify = new Shopify(
  shopName: 'this.myshopify.com',
  apiKey: 'apikey',
  password: 'pass'
);

async function getJson() 
 return shopify.product.list();


let productArr = getJson();
//console.log(productArr);

server.listen(port, host);
console.log('Running at Port 1337');

前端

<script>
   console.log(<%= obj %>);
</script>

【问题讨论】:

【参考方案1】:

使用异步函数并等待承诺:

server.get("*", async function(request, response) 
 response.render('index.html', obj: await productArr);
);

有关async functions 和promises 的更多信息。

同样在您的index.html 中,您需要将对象转换为字符串并将&lt;%= 更改为&lt;%-(不会转义文本):

<script>
   console.log(<%- JSON.stringify(obj) %>);
</script>

更多关于JSON stringify和ejs的信息

【讨论】:

以上是关于将数组从异步函数节点 js 发送到 html的主要内容,如果未能解决你的问题,请参考以下文章

如何将 html 数据从节点 js 发送到前端?

如何将 JSON 数据从节点 js 脚本发送到不同服务器上的 HTML 文件

从异步回调函数将对象推送到本地数组

如何将innerHTML添加到从节点JS发送的静态文件中?

套接字 io,节点 js,将图像/文件从服务器发送到客户端的简单示例

C# 从后台代码同步或异步注册Javascript到页面之RegisterStartupScript和RegisterClientScriptBlock的区别