微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 node.js 上运行的 index.html 无法使用“require”

如何解决在 node.js 上运行的 index.html 无法使用“require”

我有一个服务器应用程序,它使用它来显示主页

app.get("/",(req,res) => {
  res.sendFile(path.join(__dirname,"/index.html"));
});

我在 index.html 中的 js 文件在头部有这些行

    <script src="/public/js/controller.js" type="module"></script>
    <script src="/public/js/main.js" type="module"></script>

main.js 用于前端 js,而控制器用于后端,它导入 model.js 和 model.js 使用 fs 使用这一行

const fs = require("fs");

但是当我尝试使用节点服务器 http://localhost:3000 加载 index.html 时,我收到此错误

model.js:2 Uncaught ReferenceError: require is not defined
    at model.js:2

所以我添加了require.js库,然后像这样使用

    <script src="/public/js/require.js" ></script>

然后我仍然收到此错误

require.js:108 Uncaught Error: Module name "fs" has not been loaded yet for context: _. Use require([])
https://requirejs.org/docs/errors.html#notloaded
    at makeError (require.js:108)
    at Object.s [as require] (require.js:947)
    at requirejs (require.js:134)
    at model.js:2

有人可以建议,应该怎么做才能使这项工作?我在这个问题上被困了超过 2 天,我对 node.js 和这个“需要”的东西很陌生..但我知道它是 node.js 的一个非常重要的部分。

所以我想对不使用捆绑器并直接从节点服务器运行的 html 页面必须做些什么来处理这个问题有一些澄清和一些建议/帮助..

为了让我清楚我所说的“这个”是什么意思,我要做的就是获取我想用作前端导航菜单(li 项)的文件名称列表。我我在 node.js 上使用这个命令来获取数组..

fs.readdir('./data/')

我需要在我的 index.html 中有这个数组,它在 node.js 上运行的同一个服务器/文件夹/应用程序上..

我假设如果 node.js 显示一个 html 文件(使用 app.get),我将能够以这种方式使用 fs 命令..我错了吗?如果是这样,我该怎么做才能使用 readdir 并使数组在前端显示菜单

解决方法

“fs”模块是 NodeJS 中的一个内置模块,允许您使用文件系统。它在客户端不可用(想象一下人们可以访问您的网页并操纵您的文件系统!!)。

您要做的是get a list of folder names that you want use as navigation menu (li items) on the front-end。为此,您可以使用“fs”模块在服务器端获取文件夹名称列表,然后使用模板引擎使用数据呈现 HTML 文件。

对于 NodeJS,有一些流行的模板引擎:EJSpugnunjucks....

,

您可能将 server.js 作为 ES6 模块,这是一件好事,因为我自己花了一个小时来设置它。

你可以做 import * as fs from 'fs'; or import {fs} from 'fs'; 但我做了 import { promises as fs } from "fs"; 因为我喜欢我的 fs 调用 async

给人一种蟒蛇的感觉。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。