Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js与Express的预响应_Javascript_Node.js_Request_Response - Fatal编程技术网

Javascript Node.js与Express的预响应

Javascript Node.js与Express的预响应,javascript,node.js,request,response,Javascript,Node.js,Request,Response,因此,我正在使用Node.js和Express framework创建一个网页。我已经注册和登录了(我在会话中持有用户id)。下一步是在对用户进行身份验证时呈现不同的页面 其中一些页面需要一个User对象,它只是MyDB中用户的映射。因此,每当收到经过身份验证的请求时,我都需要从数据库中检索用户。但每次编写这段代码似乎都不是一个好方法。所以这里有一个问题:有没有可能(如果有,那么怎么做?)去做,比如说preresponse,这样每当我知道用户经过身份验证后,我就可以自动检索User对象,然后再进

因此,我正在使用Node.js和Express framework创建一个网页。我已经注册和登录了(我在会话中持有用户id)。下一步是在对用户进行身份验证时呈现不同的页面


其中一些页面需要一个
User
对象,它只是MyDB中用户的映射。因此,每当收到经过身份验证的请求时,我都需要从数据库中检索用户。但每次编写这段代码似乎都不是一个好方法。所以这里有一个问题:有没有可能(如果有,那么怎么做?)去做,比如说preresponse,这样每当我知道用户经过身份验证后,我就可以自动检索
User
对象,然后再进行主响应?

这个确切的例子在本文中介绍。阅读它,您将看到使用中间件在应用程序中的许多路由路径上分离出所需的通用功能的模式。

本节介绍了这个确切的示例。阅读它,您将看到使用中间件的模式,在您的应用程序的许多路由路径中找出您需要的常见功能。

中间件就是您所指的。中间件只是一个在触发路由时按顺序调用的函数。因此,要拥有loadUser功能:

function loadUser(req, res, next) {
  // You would fetch your user from the db
  var user = users[req.params.id];
  if (user) {
    req.user = user;
    next();
  } else {
    next(new Error('Failed to load user ' + req.params.id));
  }
}

app.get('/user/:id', loadUser, function(req, res){
  res.send('Viewing user ' + req.user.name);
});

您可以根据需要定义尽可能多的中间件功能。只需确保在末尾调用next(),将路由处理传递给下一个函数。

您所指的是中间件。中间件只是一个在触发路由时按顺序调用的函数。因此,要拥有loadUser功能:

function loadUser(req, res, next) {
  // You would fetch your user from the db
  var user = users[req.params.id];
  if (user) {
    req.user = user;
    next();
  } else {
    next(new Error('Failed to load user ' + req.params.id));
  }
}

app.get('/user/:id', loadUser, function(req, res){
  res.send('Viewing user ' + req.user.name);
});

您可以根据需要定义尽可能多的中间件功能。只需确保在结束时调用next(),将路由处理传递到下一个函数。

您不能只在会话中存储
User
对象吗?不太可能,因为内容可能会更改,我希望确保每次响应时都有正确的数据。嗯,但也许你是对的。也许我应该重新设计它。你能不能只在会话中存储
User
对象?不太可能,因为内容可能会改变,我想确定,每次我做出响应时,我都有正确的数据。嗯,但也许你是对的。也许我应该重新设计一下。很漂亮,非常感谢!这正是我需要的!正如Peter Lyons提到的,Express文档中包含了所有这些内容。我看了那里,但不知道为什么错过了再次感谢!我记下了你的答案,因为彼得·莱昂斯有更多的观点很漂亮,非常感谢!这正是我需要的!正如Peter Lyons提到的,Express文档中包含了所有这些内容。我看了那里,但不知道为什么错过了再次感谢!我记下了你的答案,因为彼得·莱昂斯有更多的观点