Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 得到;无法获取/quot;之后添加中间件功能_Javascript_Node.js_Express - Fatal编程技术网

Javascript 得到;无法获取/quot;之后添加中间件功能

Javascript 得到;无法获取/quot;之后添加中间件功能,javascript,node.js,express,Javascript,Node.js,Express,我正在学习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 req

我正在学习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中

但是如果我使用

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

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


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

httpServer在vanilla node.js上使用,这意味着您可以在不包含express的情况下运行服务器。但由于您包括express,您现在必须使用
app
处理路线。这是nodejs的官方文档,如果您想使用httpServer,请尝试阅读此文档并实现它

我想说的是,您的代码绝对正确,但不完整。出现错误:
无法获取/
,因为您尚未实现它。默认情况下,Nodejs不知道使用哪个路由和哪个动词

但是,
app.get('/')…
app.get(express.static…
都有效,因为您提到的是路线(在您的情况下是'/'))和动词(在您的情况下是'get')

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

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

var express=require('express');
var-app=express();
var myLogStatement=函数(req、res、next){
控制台日志(“已接收”,请求方法,“资源请求”,请求路径,“来自”,请求ip);
next();//对中间件函数的回调
}
应用程序使用(myLogStatement);
//添加路线
app.get(“/”,(_,res)=>{
res.status(200)send('Got you!');
});
app.listen(3000,函数(){
console.log(“在端口3000上侦听”);
});

您是否尝试将中间件功能移到
get
use(express.static)
之上?同意@Ryan。ExpressJS是香草NodeJS HTTP的包装器。ExpressJS使所有后端NodeJS开发人员的生活变得轻松。
app.use(express.static('src'));