如何解决在 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,有一些流行的模板引擎:EJS、pug、nunjucks....
,您可能将 server.js
作为 ES6 模块,这是一件好事,因为我自己花了一个小时来设置它。
你可以做 import * as fs from 'fs';
or import {fs} from 'fs';
但我做了 import { promises as fs } from "fs";
因为我喜欢我的 fs 调用 async
。
给人一种蟒蛇的感觉。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。