【问题标题】:Uncaught Reference error require not defined in javascript未在 javascript 中定义未捕获的引用错误
【发布时间】:2021-09-19 03:11:57
【问题描述】:

您好,我是 JavaScript 的初学者。我正在尝试访问 script.js 中 user.js 的功能,但它抛出错误,我也附加了 ss,下面是我正在做的事情的实现。

我已经创建了 4 个文件

index.js(起始文件):

const express = require("express");
const app = express();
const path = require("path");
const { getUserName, getRoomUsers } = require("./utils/user");
const port = process.env.PORT || 3030;
app.set("view engine", "ejs");
app.use(express.static(path.join(__dirname, "public")));
app.use("/home", express.static("public"));
app.get("/home/welcome", (req, res) => {
  res.render("home");
});
app.get("/", (req, res) => {
  res.send("Welcomme to startup page!!");
});

app.listen(port);

home.ejs(在 /views 中):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>welcome to home page</h1>
    <script src="script.js"></script>

</body>
</html>

user.js(在 /utils 中):

let user = [];
function getUserName(id, room) {
  const obj = users.find((user) => user.room === room && user.id === id);
  return obj.username;
}
function getRoomUsers(room) {
  return users.filter((user) => user.room === room);
}
function userJoin(id, username, room) {
  const user = { id, username, room };
  users.push(user);
  return user;
}
module.exports = {
  userJoin,
  getRoomUsers,
  getUserName,
};

script.js(在 /public 中):

const { getUserName, getRoomUsers } = require('./../utils/user.js')
getRoomUsers("abcd")

运行时出现以下错误

如何访问 script.js 中的 user.js 函数

【问题讨论】:

  • 您不要在客户端脚本中使用require(),而是使用import。并且脚本必须具有type="module" 属性。

标签: javascript uncaught-reference-error


【解决方案1】:

require 不是 JavaScript 原生方法。哪个是 Node.js

请看: https://stackoverflow.com/a/9901097/16351248

而且,您可以使用原生 JavaScript 方法:import

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import

【讨论】:

    【解决方案2】:

    requiremodule.exports 是 CommonJS 模块的特性,Node.js 支持但浏览器不支持。

    现代浏览器支持 ES6 模块(使用 importexport),因此您可以以这种格式重写您的模块。 MDN has a guide.

    或者,您可以使用 ParcelWebpack 之类的工具将您的模块捆绑到一个与浏览器兼容的 JS 文件中,您可以将其提供给浏览器。

    【讨论】:

      猜你喜欢
      • 2013-04-10
      • 1970-01-01
      • 2013-10-27
      • 2018-09-27
      • 2011-09-25
      • 2021-11-01
      • 2017-11-22
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多