我现在正在学习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");
});