【问题标题】:Express: How does this function work?Express:这个功能是如何工作的?
【发布时间】:2014-06-15 04:25:54
【问题描述】:
  router.post('/register', function(req, res) {
    User.register(new User({ username : req.body.email }), req.body.password, function(err, account) {
        if (err) {
            return res.render('register', { account : account });
        }

        passport.authenticate('local')(req, res, function () {
          res.redirect('/');
        });
    });
  });

我对这个路由帖子有大致的了解,但我并不完全理解。

什么信息一般通过req进来?好像如果我做 req.body.email 并且如果在我的注册 html 页面的正文中我已经提交了一个带有电子邮件和密码字段的表单,我可以简单地以这种方式访问​​它们吗?

在 function(err, account) 回调中,它究竟是从哪里获取 err 和 account 变量的?我从来没有真正理解回调函数的变量是如何决定的,或者它们是什么,似乎当你路由它时,它以某种方式需要两个变量 err 和 account?

非常感谢!

【问题讨论】:

  • user.register 函数决定如何、何时以及使用什么参数来调用传递给它的回调函数。
  • 这是 express 框架。通常,还有很多其他“中间件”,它们是 req 和 res 对象在到达路由器之前通过的函数。你应该设置一个手动的http服务器并查看req(req对象来自本机节点http服务器)并查看express如何更改它(以及像bodyparser这样的中间件)
  • 另外,您可以在javascript中将函数设置为变量,这称为闭包。这就是这里发生的事情。您调用 User.register 函数并提供新用户、密码和函数作为参数。 User.register 将调用该函数并向其提供帐户和/或错误。

标签: javascript node.js express


【解决方案1】:

第一个- 好吧,您应该阅读 ExpressJS 文档并了解正文、查询和参数之间的区别,但基本上是这样的

body是指请求的body,是通过POST或者PUT提交的数据 query 指的是 url 或查询字符串的搜索部分,“?”之后的所有内容 params 指的是路径中被参数化的部分。

希望能为您提供有关如何以及在何处查找信息的线索

第二个节点约定总是传递给回调的第一个变量是错误变量,其余的根据函数在这种情况下是帐户,因为该函数假设创建数据库帐户并返回整个帐户信息,所以 ir可以被回调使用

【讨论】:

    【解决方案2】:

    一般通过req进来什么信息?

    请求对象 (req) 带有您正在处理的请求的数据。例如:

    • 触发请求的表单中使用的字段(req.body 下)
    • 请求URL中使用的参数(req.params下)
    • 会话/cookie 信息(在req.session 下)

    请参阅here 了解更多信息。

    而在 function(err, account) 回调中,究竟是从哪里获取 err 和 account 变量的?

    按照 Node 中的约定,回调将任何错误作为第一个参数传递,任何非错误结果从第二个参数开始传递。因此,您通常会看到名为err 的第一个参数。 err 对象的结构并不完全标准,但假设err 对象中会有message 字段,可能还有一些错误代码是正常的。

    在您的示例中,您似乎将该回调传递给 Mongoose 或其他一些数据库处理库。该库将尝试在User 对象/模型/模式上执行register 函数。完成后,如果遇到任何错误,它们将通过err 对象返回给您。否则,您可以期望 account 对象保存用户帐户的详细信息。

    另外:当然,您可以随意命名erraccount

    【讨论】:

      猜你喜欢
      • 2017-07-12
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2020-12-28
      • 2020-11-12
      • 2019-06-15
      相关资源
      最近更新 更多