设置 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 ')' 错误

设置 Neo4J J2EE 项目时出现问题

如何在我的项目上设置惯性,当我尝试加载登录页面时出现错误

在 iOS 项目(在 Swift 中)设置 Google Analytics 时出现“保护体可能无法通过”错误 [重复]

在 localhost Xampp 中使用 PHP 7.3.9 设置正在运行的 Codeigniter 2.1.4 项目时出现问题

将这组对象设置为数组时出现问题