我有一段代码:
var http = require('http');
function createApplication() {
let app = function(req,res,next) {
console.log("hello")
};
return app;
}
app = createApplication();
app.listen = function listen() {
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
app.listen(3000, () => console.log('Example app listening on port 3000!'))
这里没什么好看的。但是当我运行此代码并转到localhost:3000
时,我可以看到hello
正在打印。我不确定这个函数是如何被调用的。此外,该功能接收req
& res
对象也是如此。不知道这里发生了什么。
答案 0 :(得分:2)
http.createServer()
有几个可选参数。一个是requestListener
https://nodejs.org/api/http.html#http_http_createserver_options_requestlistener
requestListener是一个自动添加到的函数 '请求'事件
由于您致电listen()
,因此app.listen()
,this
内的该功能将引用您在createApplication
中所做的功能。所以你基本上在做:
http.createServer(function(req,res,next) {
console.log("hello")
});
因此,您的函数被添加为任何请求的回调,因此您提出的任何请求将创建 hello 的控制台日志。
如果你想要一个等效的更直接的例子
var http = require('http');
var server = http.createServer();
server.on('request',function(req,res,next) {
//callback anytime a request is made
console.log("hello")
});
server.listen(3000);
答案 1 :(得分:-1)
我们需要要求HTTP模块并将我们的服务器绑定到端口3000才能收听。
// content of index.js
const http = require('http')
const port = 3000
const requestHandler = (request, response) => {
console.log(request)
response.end('Hello Node.js Server!')
}
const server = http.createServer(requestHandler)
server.listen(port, (err) => {
if (err) {
return console.log('something bad happened', err)
}
console.log(`server is listening on ${port}`)
})