栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Express中使用的“ next”参数是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Express中使用的“ next”参数是什么?

它将控制权传递到下一个 匹配的 路由。例如,在您给出的示例中,您可能会在数据库中查找用户(如果

id
给出了),然后将其分配给
req.user

在下面,您可能会有一条类似的路线:

app.get('/users', function(req, res) {  // check for and maybe do something with req.user});

由于/ users / 123将首先匹配示例中的路由,因此将首先检查并找到user

123
;然后
/users
可以这样做的结果。

我认为,路由中间件是一种更灵活,功能更强大的工具,因为它不依赖于特定的URI方案或路由排序。我倾向于对这样显示的示例进行建模,假设

Users
模型具有async
findOne()

function loadUser(req, res, next) {  if (req.params.userId) {    Users.findOne({ id: req.params.userId }, function(err, user) {      if (err) {        next(new Error("Couldn't find user: " + err));        return;      }      req.user = user;      next();    });  } else {    next();  }}// ...app.get('/user/:userId', loadUser, function(req, res) {  // do something with req.user});app.get('/users/:userId?', loadUser, function(req, res) {  // if req.user was set, it's because userId was specified (and we found the user).});// Pretend there's a "loadItem()" which operates similarly, but with itemId.app.get('/item/:itemId/addTo/:userId', loadItem, loadUser, function(req, res) {  req.user.items.append(req.item.name);});

能够像这样控制流量非常方便。您可能希望某些页面仅对带有admin标志的用户可用:

function requireAdmin(req, res, next) {  if (!req.user || !req.user.admin) {    next(new Error("Permission denied."));    return;  }  next();}app.get('/top/secret', loadUser, requireAdmin, function(req, res) {  res.send('blahblahblah');});

希望这给您一些启发!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/436456.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号