node.js' Hello World 示例中的函数参数
Function arguments in node.js' Hello World example
我是 JavaScript 的新手,正在尝试使用在线发布的代码自学。我不确定将参数传递给各个级别的各种函数的方式。
比如node.js"Hello World"例子(转载如下),'req'和'res'变量从哪里来,客户端如何调用服务器并将此信息传递给它(并获得结果)!?!
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
请求 -> Http (https) 请求 Object。
您可以从中获取请求查询、参数、body、headers 和 cookie。
您可以在那里覆盖任何值或添加任何内容。
但是,覆盖 headers 或 cookie 不会影响返回浏览器的输出。
Res -> Http (https) 响应 Object。
响应返回给客户端浏览器。
您可以放置新的 cookie 值,这将写入客户端浏览器(在跨域规则下)
一旦你res.send()或res.redirect()或res.render(),你就不能再做,否则会出现未捕获的错误。
req = {
_startTime : Date,
app : function(req,res){},
body : {},
client : Socket,
complete : Boolean,
connection : Socket,
cookies : {},
files : {},
headers : {},
httpVersion : String,
httpVersionMajor : Number,
httpVersionMinor : Number,
method : String, // e.g. GET POST PUT DELETE
next : function next(err){},
originalUrl : String, /* e.g. /erer?param1=23¶m2=45 */
params : [],
query : {},
readable : Boolean,
res : ServerResponse,
route : Route,
signedCookies : {},
socket : Socket,
url : String /*e.g. /erer?param1=23¶m2=45 */
}
res = {
app : function(req, res) {},
chunkedEncoding: Boolean,
connection : Socket,
finished : Boolean,
output : [],
outputEncodings: [],
req : IncomingMessage,
sendDate : Boolean,
shouldkeepAlive : Boolean,
socket : Socket,
useChunkedEncdoingByDefault : Boolean,
viewCallbacks : [],
writable : Boolean
}
它只是一个传递给createServer
方法的函数体。变量 req
和 res
不存在,因为它们不是变量,它们是函数参数,这些名称通常用于可读性,但绝不是强制性的 - 例如,代码如果你这样做,效果会一样:
http.createServer(function (a, b) {
b.writeHead(200, {'Content-Type': 'text/plain'});
b.end('Hello World\n');
}).listen(1337, '127.0.0.1');
你知道,就像你定义一个函数一样:
function someFunction(firstParam, secondParam) {
// do something with firstParam and secondParam
}
But I'm not sure how a function with no name (anonymous) nested inside another function (or method) is called from somewhere else.
看看这是否有助于您理解:
function add(a,b){return a+b}
function sub(a,b){return a-b}
function math(f, x, y) {
alert(f(x, y));
}
math(add, 1, 2);
math(sub, 8, 4);
// pass in anon function - multiplication
math(function(a, b){return a * b}, 2, 5);
查看文档。他们帮助:https://nodejs.org/api/http.html#http_http_createserver_requestlistener
http.createServer 正在创建 http.Server 的实例。 http.Server是一个事件发射器,可以发射多个事件,包括"request."
您作为参数传入的函数是RequestListener。
您传入的函数是绑定到 "request" 事件的 requestListener。
因此您正在创建 http.Server 的实例,它会发出事件并调用函数来响应这些事件。假设您的 http.Server 实例是 http_server
在幕后,http_server 可能做了类似的事情:
http_server.on('request', [yourFunction])
Node 隐式地将 req 和 res 发送到您的函数中。因此,每次客户端向您的服务器发出请求时,它都会发出 "request" 事件。然后,由于 [yourFunction] 绑定到请求事件,它会使用传入的 req 和 res 参数进行调用。
我是 JavaScript 的新手,正在尝试使用在线发布的代码自学。我不确定将参数传递给各个级别的各种函数的方式。
比如node.js"Hello World"例子(转载如下),'req'和'res'变量从哪里来,客户端如何调用服务器并将此信息传递给它(并获得结果)!?!
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
请求 -> Http (https) 请求 Object。 您可以从中获取请求查询、参数、body、headers 和 cookie。 您可以在那里覆盖任何值或添加任何内容。 但是,覆盖 headers 或 cookie 不会影响返回浏览器的输出。
Res -> Http (https) 响应 Object。 响应返回给客户端浏览器。 您可以放置新的 cookie 值,这将写入客户端浏览器(在跨域规则下) 一旦你res.send()或res.redirect()或res.render(),你就不能再做,否则会出现未捕获的错误。
req = {
_startTime : Date,
app : function(req,res){},
body : {},
client : Socket,
complete : Boolean,
connection : Socket,
cookies : {},
files : {},
headers : {},
httpVersion : String,
httpVersionMajor : Number,
httpVersionMinor : Number,
method : String, // e.g. GET POST PUT DELETE
next : function next(err){},
originalUrl : String, /* e.g. /erer?param1=23¶m2=45 */
params : [],
query : {},
readable : Boolean,
res : ServerResponse,
route : Route,
signedCookies : {},
socket : Socket,
url : String /*e.g. /erer?param1=23¶m2=45 */
}
res = {
app : function(req, res) {},
chunkedEncoding: Boolean,
connection : Socket,
finished : Boolean,
output : [],
outputEncodings: [],
req : IncomingMessage,
sendDate : Boolean,
shouldkeepAlive : Boolean,
socket : Socket,
useChunkedEncdoingByDefault : Boolean,
viewCallbacks : [],
writable : Boolean
}
它只是一个传递给createServer
方法的函数体。变量 req
和 res
不存在,因为它们不是变量,它们是函数参数,这些名称通常用于可读性,但绝不是强制性的 - 例如,代码如果你这样做,效果会一样:
http.createServer(function (a, b) {
b.writeHead(200, {'Content-Type': 'text/plain'});
b.end('Hello World\n');
}).listen(1337, '127.0.0.1');
你知道,就像你定义一个函数一样:
function someFunction(firstParam, secondParam) {
// do something with firstParam and secondParam
}
But I'm not sure how a function with no name (anonymous) nested inside another function (or method) is called from somewhere else.
看看这是否有助于您理解:
function add(a,b){return a+b}
function sub(a,b){return a-b}
function math(f, x, y) {
alert(f(x, y));
}
math(add, 1, 2);
math(sub, 8, 4);
// pass in anon function - multiplication
math(function(a, b){return a * b}, 2, 5);
查看文档。他们帮助:https://nodejs.org/api/http.html#http_http_createserver_requestlistener
http.createServer 正在创建 http.Server 的实例。 http.Server是一个事件发射器,可以发射多个事件,包括"request."
您作为参数传入的函数是RequestListener。 您传入的函数是绑定到 "request" 事件的 requestListener。
因此您正在创建 http.Server 的实例,它会发出事件并调用函数来响应这些事件。假设您的 http.Server 实例是 http_server
在幕后,http_server 可能做了类似的事情:
http_server.on('request', [yourFunction])
Node 隐式地将 req 和 res 发送到您的函数中。因此,每次客户端向您的服务器发出请求时,它都会发出 "request" 事件。然后,由于 [yourFunction] 绑定到请求事件,它会使用传入的 req 和 res 参数进行调用。