NodeJS 如何处理快速响应返回的JS文件.sendFile()

iklwldmw  于 2023-03-01  发布在  Node.js
关注(0)|答案(1)|浏览(181)

我有一个在后端使用Node.js + Express的API。
对于其中一个API端点,我希望使用“sendFile”的Express响应对象方法,文档如下:
https://expressjs.com/en/api.html#res.sendFile
API应通过sendFile方法返回一个Javascript文件。
我不明白的是如何在前端读入.js文件,以便使用该文件中定义的JavaScript函数。sendFile部分似乎正在工作--只是文件的使用我不明白。
下面是我在后端所做的工作:

app.get("/api/member", async (req, res) => {
  
  options = {
    root: path.join(__dirname, '/static'),
    dotfiles: 'deny'
  }

  res.sendFile("member.js", options, (err) => {
    if (err) {
      console.log(err)
      next(err)
    } else {
      console.log('Sent file')
    }
  })

});

这看起来工作得很好,因为我可以导航到本地主机上的端点,它会加载JS文件,文件member.js只包含一些javascript函数定义。
但是,一旦文件到达前端,我就不知道如何消费/使用它。
以下是我目前在前端的内容:

async function refreshJS() {

  const url = `${baseUrl}/member`;
  const response = await fetch(url, { credentials: "include" });
  const script = document.createElement("script")
  script.type = "text/javascript"
  script.src = response.body
  document.head.appendChild(script)
  eval(script)
  
}

我花了很多时间在控制台/调试器中查找与JS函数关联的文本--但是它们无处可寻。
我已经通过控制台本地加载JS文件测试了这个通用框架,它工作正常,所以我认为它是由于误解了JS函数在API响应中的位置而导致的。例如,如果我将上面的命令替换为:

script.src = response.body

script.src = "member.js"

那么只要我在本地拥有该文件,一切都将正常工作。
我回顾的例子似乎专门处理发送一个加载到前端的HTML文件,但是,我无法从fetch API中找到支持文档来理解如何使用JS文件内容。

rekjcdws

rekjcdws1#

确定了我自己问题的答案。下面是使它工作的前端代码。

async function refreshJS() {
  const url = `${baseUrl}/member`;
  const response = await fetch(url, { credentials: "include" });
  eval(await response.text())
}

相关问题