我在运行快递应用程序时遇到此错误



我在Express Router中间件上收到类型错误。以下是提到的代码和错误。有什么帮助吗?

该应用程序运行良好,但当我在浏览器中点击URL时,它在控制台中出现以下错误。

这是我的app.js文件

app.js

//jshint esversion:6
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use("view engine", "ejs");
app.get("/", function(req, res) {
// res.send("Hello");
var today = new Date();
console.log(date);
var currentDay = today.getDay();
var day = "";
console.log(currentDay);
if (currentDay === 6 || currentDay === 0) {
// res.send("yay! it's weekend. ");
day = "weekend";
} else {
day = "weekday";
}
res.render("list", {
kindOfDay: day
});
});

app.listen(3000, function() {
console.log("server started at port 3000");
});

这是list.ejs文件

list.ejs

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>to do list</title>
</head>
<body>
<h1>It's a <%= kindOfDay %>!</h1>
</body>
</html>

错误

E:todoList-v1node_modulesexpresslibrouterindex.js:458
throw new TypeError('Router.use() requires a middleware function but 
got a ' + gettype(fn))
^
TypeError: Router.use() requires a middleware function but got a string    
at Function.use (E:todoList-v1node_modulesexpresslibrouterindex.js:458:13)
at Function.<anonymous> (E:todoList-v1node_modulesexpresslibapplication.js:220:21)
at Array.forEach (<anonymous>)
at Function.use (E:todoList-v1node_modulesexpresslibapplication.js:217:7)
at Object.<anonymous> (E:todoList-v1app.js:6:5)
at Module._compile (internal/modules/cjs/loader.js:1133:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1153:10)
at Module.load (internal/modules/cjs/loader.js:977:32)
at Function.Module._load (internal/modules/cjs/loader.js:877:14)       
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)

我得到了上述错误

app.use("view engine", "ejs");

应该是

app.set("view engine", "ejs");

app.use用于应用中间件功能。要设置express变量,需要使用app.set。这就是为什么您会收到错误,因为app.use需要一个中间件函数/回调,如function(req, res) {...}