添加中间件功能后得到"Cannot GET /"



我现在正在学习Node.js和Express。我有一个问题,当我将中间件功能添加到我的代码中时,如下所示:

var express = require('express');
var http = require('http');
var app = express();
var httpServer = http.createServer(app);
/*
app.get('/', function(req, res) {
console.log("Received GET request for resource /");
res.sendFile('index.html', { root: __dirname });
});
*/
//app.use(express.static('src'));
var myLogStatement = function(req, res, next) {
console.log("Received", req.method, "request for resource", req.path, "from", req.ip);
next(); // callback to the middleware function
}
app.use(myLogStatement);
httpServer.listen(3000, function(){
console.log("Listening on port 3000");
});

然后我无法正确加载HTML页面。我在localhost:3000中得到了Cannot GET/。

但是如果我使用

app.get('/', function(req, res) {
console.log("Received GET request for resource /");
res.sendFile('index.html', { root: __dirname });
});

app.use(express.static('src'));

然后我的HTML就可以正确加载了。

有人能帮我弄清楚吗?谢谢

httpServer在vanilla node.js上使用,这意味着您可以在不包含express的情况下运行服务器。但由于您包含了快递,您现在必须使用app来处理路线。以下是nodejs的官方文档,如果您想使用它,请尝试阅读并实现httpServerhttps://nodejs.org/en/docs/guides/getting-started-guide/

我想指出的是,您的代码是绝对正确但不完整的。你会得到一个错误:Cannot GET /,因为你还没有实现它。默认情况下,Nodejs不知道该使用哪个路由和用于哪个谓词。

然而,app.get('/'...app.get(express.static...都起作用,只是因为您提到了路由(在您的情况下是"/"(和动词(在您情况下是"GET"(。

请使用下面的片段,它是有效的。

注意:我已经删除了HTTP模块,因为它不是必需的。

var express = require('express');
var app = express();

var myLogStatement = function(req, res, next) {
console.log("Received", req.method, "request for resource", req.path, "from", req.ip);
next(); // callback to the middleware function
}
app.use(myLogStatement);
// add route
app.get('/', (_, res) => {
res.status(200).send('Got you!');
});
app.listen(3000, function(){
console.log("Listening on port 3000");
});

最新更新