设置 EJS 项目时出现问题
Posted
技术标签:
【中文标题】设置 EJS 项目时出现问题【英文标题】:Trouble while setting up an EJS project 【发布时间】:2021-10-16 03:50:59 【问题描述】:尝试使用 ejs 构建待办事项列表应用程序,但我遇到了错误:
这是错误代码
throw new TypeError('Router.use() 需要一个中间件函数但得到一个 ' + gettype(fn)) ^
TypeError: Router.use() 需要一个中间件函数但得到一个字符串 在 Function.use (/home/revolverclyde/Web_Development/to-do-list/node_modules/express/lib/router/index.js:458:13) 在功能。 (/home/revolverclyde/Web_Development/to-do-list/node_modules/express/lib/application.js:220:21) 在 Array.forEach () 在 Function.use (/home/revolverclyde/Web_Development/to-do-list/node_modules/express/lib/application.js:217:7) 在对象。 (/home/revolverclyde/Web_Development/to-do-list/app.js:8:5) 在 Module._compile (internal/modules/cjs/loader.js:778:30) 在 Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) 在 Module.load (internal/modules/cjs/loader.js:653:32) 在 tryModuleLoad (internal/modules/cjs/loader.js:593:12) 在 Function.Module._load (internal/modules/cjs/loader.js:585:3)
这是我的 app.js 文件的内容
const express = require("express");
const bodyParser = require("body-parser");
const Router = require("express");
const app = express();
app.use(app,Router);
app.use("view engine", "ejs");
app.get("/", function(req, res)
var today = new Date();
var currentDay = today.getDay();
var day = "";
if (today.getDay() === 6 || today.getDay() === 0)
day = "Weekend";
else
day = "Weekday"
res.render("list", kindofday: day)
);
app.listen(3000, function()
console.log("Server started on port 3000")
)
这是我的 list.ejs 文件的内容
<!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>To Do list</title>
</head>
<body>
<h1>It's <%=kindofday%></h1>
</body>
</html>
感谢您的帮助和时间。
【问题讨论】:
什么是routes
?您粘贴的源代码没有说明为什么 routes.initialize
会成为一件事。
一个错字/从不同的修复尝试遗留下来。它已被删除。感谢您指出。
【参考方案1】:
假设您想在这条路线上接收用户的请求
https://yourDomainName/api
为此,您要在服务器中处理 get、put、post、delete 方法 因此,您必须分别为所有这些方法编写代码,例如,
const express = require("express");
const app = express();
app.get("/api", () =>
...
)
app.post("/api", () =>
...
)
app.put("/api", () =>
...
)
app.delete("/api", () =>
...
)
您可以看到我们一次又一次地编写相同的代码。 所以,express 有一个可以像这样处理这些请求的路由器类
...
const router = express.Router();
router
.route("/api");
.get( ... )
.post( ... )
.put( ... )
.delete( ... )
这是路由器的一个用例 另一种是在同一条路线中使用子路线。就像你想在“api/”中有更多的路线
所以你写
...
router.get("/cat", () =>
...
)
app.use("/api", router)
...
现在在“/api/cat”上有人可以请求某些东西。您可以使用“/api/someOtherRoute”上的其他子路由多次执行此操作
但在您的应用中,您无需任何需要就使用路由器。而且你正在使用
app.use(app, router);
express 不能在它自己的方法中使用。这可能是您的应用崩溃的原因
【讨论】:
请在您的代码中添加一些解释,这有助于您的答案更清晰。 谢谢。我已将其删除,但现在出现新错误。 我已编辑帖子以包含新错误。以上是关于设置 EJS 项目时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试执行一个简单的 EJS 程序,但在编译 EJS 时出现 Unexpected Token ')' 错误
在 iOS 项目(在 Swift 中)设置 Google Analytics 时出现“保护体可能无法通过”错误 [重复]
在 localhost Xampp 中使用 PHP 7.3.9 设置正在运行的 Codeigniter 2.1.4 项目时出现问题