Node如何知道“ req”和“ res”是http.createServer(function(req,res))中的请求和响应对象

时间:2019-01-09 07:06:11

标签: node.js

我是Node.js的新手,我很难理解这一点。 Node如何知道这两个参数是对象?他们来自哪里?它们是由Node本身提供的吗?

3 个答案:

答案 0 :(得分:1)

createServer()是一个需要一个参数的函数-回调函数。它采用您提供的回调函数(在本例中为匿名函数),将其存储在某个地方并在每次新请求到来时调用它。本机代码解析对javascript对象request的请求,并将其与对象response(用于处理请求的回调函数的集合)一起传递给回调函数。不是节点,而是您应该知道节点用两个参数回叫您使事情发生的人。

答案 1 :(得分:0)

查看文档:

https://nodejs.org/api/http.html#http_http_createserver_options_requestlistener

https://www.w3schools.com/nodejs/nodejs_http.asp

https://www.w3schools.com/nodejs/met_http_createserver.asp

https://www.w3schools.com/nodejs/func_http_requestlistener.asp

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hello World!');
  res.end();
}).listen(8080);

答案 2 :(得分:0)

每当您通过require()之类的方法在Node.js中使用一个库时,实际上是从该库中导入所有代码,执行该代码,并且通常获得的返回值等于该模块的最终{{ 1}}变量。因此,当您从库中调用函数时,该函数是在库中定义的,包括有关如何决定调用传递给它的回调的定义。名称“ req”和“ res”可以是任何名称-您可以将它们称为“ John”和“ Amy”(但为了清楚起见,请不要使用)-但是第一个参数始终是请求对象,第二个参数始终是请求对象将始终是响应对象。因为这是库在调用回调时传递它们的顺序。

大多数框架都坚持使用module.exports参数结构,只是因为捆绑的HTTP库就是这样做的。它们不是必须的,但是当每个人都保持一致时总是很好,因此您可以轻松地猜测如何使用新的库:)