如何使用正确的请求调用函数&响应对象?

时间:2018-06-09 16:28:05

标签: javascript node.js

我有一段代码:

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对象也是如此。不知道这里发生了什么。

2 个答案:

答案 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}`)
})