Javascript 为什么Express函数同时将请求和响应作为参数?

Javascript 为什么Express函数同时将请求和响应作为参数?,javascript,node.js,http,express,Javascript,Node.js,Http,Express,我是node.js新手,熟悉Express。以下代码是我困惑的根源: var server = http.createServer(handleRequest); function handleRequest(req, res) { var path = req.url; switch (path) { case "/n": return renderPage_1(req, res); default: return renderPage_2(req, res

我是node.js新手,熟悉Express。以下代码是我困惑的根源:

var server = http.createServer(handleRequest);

function handleRequest(req, res) {
  var path = req.url;

  switch (path) {
  case "/n":
    return renderPage_1(req, res);
  default:
    return renderPage_2(req, res);
  }
}
我知道服务器需要接受HTTP请求(req)。但是,如果我们返回一个响应,为什么响应也是回调函数中的一个参数?我一直陷入死胡同,认为这与响应对象的范围有关,尽管我不确定

如能澄清此事,我将不胜感激。我还没有找到一个资源来描述我的困惑

最好的,
Abid

我想你的问题的答案是,express的作者就是这样决定实现这个库的。从较高的层次上讲,express实际上只是一个轻量级的包装器,它可以轻松地使用NodeJ构建基于中间件的http服务。req和res对象都传递给每个express中间件函数的原因是,在实践中,web服务很少能够在一个步骤中完成整个请求。通常,服务构建为中间件层,分多个步骤构建响应

例如,您可能有一个中间件函数,该函数在请求中查找身份信息,并在响应上设置一些特定于身份验证的头时获取任何相关的身份元数据。然后,请求可能流向授权中间件,授权中间件使用获取的元数据来确定当前用户是否获得授权,如果用户未获得授权,则可以通过关闭响应流提前结束请求。如果用户得到授权,那么请求将继续到下一个中间件等。为了实现这一点,每个中间件功能(堆栈的步骤)都需要能够访问来自请求的信息,以及将信息写入响应。Express通过将请求和响应对象作为参数传递给中间件函数来处理此问题,但这只是一种方法

现在,作者可以决定以不同的方式实现该库,这样每个路由处理程序都应该返回一个对象,例如
{status:200,content:“Hello,world”}
而不是在响应对象上调用方法,但这将是一个惯例问题,您可以很容易地在express周围编写一个包装器,如果需要,可以这样编写服务


希望这有帮助。

因为您没有返回响应。。。在这种情况下,返回只会终止函数。请参阅文档。@KevinB在这种情况下,switch语句返回renderPage_1(req,res)的结果。我不明白它除了终止函数之外,怎么什么也不做,因为否则它默认为renderPage_2(req,res)。总的来说,我的代码是可以工作的,我知道如何编写它以使其工作,但我不知道引擎盖下到底发生了什么,如果在原始问题中这不够清楚,很抱歉。response param包含一个可用于生成/发送响应的对象。这就是它的目的。没有它,您无法响应客户端。基本请求处理通常意味着您调用
res.send(reply)
res.render(view,params)
。这就是express的构建方式。这实际上非常有帮助!正是我所寻找的对Express的洞察力!