NodeJS http 模块:什么是 requestListener?
NodeJS http module: what is requestListener?
我是 JS 的新手,更具体地说是 Node。即使在阅读了 api 文档之后,我仍然对以下方法中的 'requestListener' 感到困惑。
http.createServer([requestListener]);
搜索 google 发现 'requestListener' 是一个具有以下签名的 (n)(匿名)函数:
function (request, response) { };
我想我没有正确阅读文档,希望有人能指出正确的方向。
直接回答你的问题:这是一个函数,当服务器收到请求并给出这两个参数时调用它。
至少你可以尝试在函数内部做一个console.log(request, response)
,看看你的终端输出了什么。
但这只是兔子洞的开始。您应该阅读 "callback functions",因为它们是 Node(以及相当多的客户端 javascript)如何(异步)运行的组成部分。
docs say 方法调用采用一个函数,当您的应用程序收到新请求时将调用该函数。正如您在问题中正确陈述的那样,此函数采用两个参数 - request
和 response
对象。
您应该检查这些对象的内容以了解您可以使用哪些信息。此外,请查看 API 文档 request and response。
该功能是可选的;您还可以通过以下方式附加请求处理程序:
var server = http.createServer()
server.on('request', function (req, res) {
// Process the request here
})
实际上,当有人在浏览器中打开您的网站时(即发出 GET http 请求),将调用此函数。该函数的目的是向客户端提供 HTTP 响应主体,即呈现网页或根据需要执行任何业务逻辑。
http.createServer
方法创建一个 server 对象。
server
对象有一个 listen 方法。如果调用 listen
方法,例如:
createServer(requestListener).listen({ port:80 });
server
对象将侦听端口 80,当在该端口上收到 Http 请求时,server
对象将调用函数 requestListener
,将其传递给两个request
和 response 类型的对象。所以你可以写你的requestListener
,例如:
function requestListener(req, res) {
res.write("Hello world");
res.end();
}
它会将字符串 Hello world
推送到 每个 url 正在访问您的这个简单的 Web 服务器。
write 是 response
对象的众多方法之一。
您可以在PC上运行以上几行代码,将浏览器指向http://localhost。
如果您有其他应用程序侦听端口 80,请在您的 listen
方法中使用不同的端口号。
为 requestListener
使用匿名函数只是一种不同的编码模式,无论好坏。我上面的代码可以重写为:
createServer((req, res) => {
res.write("Hello world");
res.end();
}).listen({ port:80 });
上面的代码是非常初级的,并且会向命中它的每个 Http 请求发送相同的响应。该代码不区分 localhost/page1 或 localhost/page2 等。因此,要执行更多操作,必须显着扩展 requestListener
以解析 url 中的不同路径并决定为每个发送什么内容。但是要在不编写太多代码的情况下作为真正的 Web 服务器做任何有用的事情,您将需要一个包。 Express 是一款出色的软件,可以驱动许多现实生活中的网络服务器。
我是 JS 的新手,更具体地说是 Node。即使在阅读了 api 文档之后,我仍然对以下方法中的 'requestListener' 感到困惑。
http.createServer([requestListener]);
搜索 google 发现 'requestListener' 是一个具有以下签名的 (n)(匿名)函数:
function (request, response) { };
我想我没有正确阅读文档,希望有人能指出正确的方向。
直接回答你的问题:这是一个函数,当服务器收到请求并给出这两个参数时调用它。
至少你可以尝试在函数内部做一个console.log(request, response)
,看看你的终端输出了什么。
但这只是兔子洞的开始。您应该阅读 "callback functions",因为它们是 Node(以及相当多的客户端 javascript)如何(异步)运行的组成部分。
docs say 方法调用采用一个函数,当您的应用程序收到新请求时将调用该函数。正如您在问题中正确陈述的那样,此函数采用两个参数 - request
和 response
对象。
您应该检查这些对象的内容以了解您可以使用哪些信息。此外,请查看 API 文档 request and response。
该功能是可选的;您还可以通过以下方式附加请求处理程序:
var server = http.createServer()
server.on('request', function (req, res) {
// Process the request here
})
实际上,当有人在浏览器中打开您的网站时(即发出 GET http 请求),将调用此函数。该函数的目的是向客户端提供 HTTP 响应主体,即呈现网页或根据需要执行任何业务逻辑。
http.createServer
方法创建一个 server 对象。
server
对象有一个 listen 方法。如果调用 listen
方法,例如:
createServer(requestListener).listen({ port:80 });
server
对象将侦听端口 80,当在该端口上收到 Http 请求时,server
对象将调用函数 requestListener
,将其传递给两个request
和 response 类型的对象。所以你可以写你的requestListener
,例如:
function requestListener(req, res) {
res.write("Hello world");
res.end();
}
它会将字符串 Hello world
推送到 每个 url 正在访问您的这个简单的 Web 服务器。
write 是 response
对象的众多方法之一。
您可以在PC上运行以上几行代码,将浏览器指向http://localhost。
如果您有其他应用程序侦听端口 80,请在您的 listen
方法中使用不同的端口号。
为 requestListener
使用匿名函数只是一种不同的编码模式,无论好坏。我上面的代码可以重写为:
createServer((req, res) => {
res.write("Hello world");
res.end();
}).listen({ port:80 });
上面的代码是非常初级的,并且会向命中它的每个 Http 请求发送相同的响应。该代码不区分 localhost/page1 或 localhost/page2 等。因此,要执行更多操作,必须显着扩展 requestListener
以解析 url 中的不同路径并决定为每个发送什么内容。但是要在不编写太多代码的情况下作为真正的 Web 服务器做任何有用的事情,您将需要一个包。 Express 是一款出色的软件,可以驱动许多现实生活中的网络服务器。