Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Node.js NodeJS Express:如何获取对象项_Node.js_Mongodb_Express_Validation - Fatal编程技术网

Node.js NodeJS Express:如何获取对象项

Node.js NodeJS Express:如何获取对象项,node.js,mongodb,express,validation,Node.js,Mongodb,Express,Validation,我试图创建一个简单的登录表单,但无法验证来自MongoDB的密码 首先,我为表单验证创建.post路由,然后获取我想要与表单进行比较的MongoDB数据 这是我的密码: app.post('/users', (req, res) => { const reqUser = req.body.params.name const reqPW = req.body.params.password // connect to mongoDB const collection = c

我试图创建一个简单的登录表单,但无法验证来自MongoDB的密码

首先,我为表单验证创建.post路由,然后获取我想要与表单进行比较的MongoDB数据

这是我的密码:

app.post('/users', (req, res) => {
  const reqUser = req.body.params.name
  const reqPW = req.body.params.password

  // connect to mongoDB
  const collection = client.db().collection("users")
  collection.find({name: reqUser}).toArray(function (err, results) {
    if (err) {
      console.log(err)
      res.send([])
      return
    }
    else {
      console.log('RESULT', results) // returns the object
      console.log('RES PW', results.password) // returns undefined

      // this does not work
      Object.keys(results).forEach(function(key) {
        console.log('key is: ', key); // returns 0
      });

      // validate user+pw
      if (!reqUser || !reqPW/*|| reqPW !== password*/) {
        return res.status(401).end()
      }

      // send result to frontend
      res.send(results)
      res.end
    }
  })
})
因此,我在
results
中返回了我的对象,但我无法从该对象获取数据。 我还尝试使用
array.from()
将其转换为一个数组,但也没有成功

请注意,我还没有实现密码的哈希和盐析,因为我认为我首先需要一个有效的验证。我需要先实现这些吗?

我刚刚检查了:

方法返回一个数组,该数组包含游标中的所有文档。该方法完全迭代游标,将所有文档加载到RAM中并耗尽游标

因此
toArray()
将返回一个数组,而不是对象,因此您的结果将是一个数组,其中包含从数据库中获得的所有项(对象)。如果您
console.log(results)
,它应该打印数组而不是对象

假设不会有两个用户具有相同的名称,您得到的结果将只是一个包含一个对象的数组,因此您可以执行以下操作:

结果[0]。密码//获取第一个对象的密码字段
不确定这是否解决了您的问题,但根据您的代码,这就是我在其中发现的问题。

我刚刚检查了:

方法返回一个数组,该数组包含游标中的所有文档。该方法完全迭代游标,将所有文档加载到RAM中并耗尽游标

因此
toArray()
将返回一个数组,而不是对象,因此您的结果将是一个数组,其中包含从数据库中获得的所有项(对象)。如果您
console.log(results)
,它应该打印数组而不是对象

假设不会有两个用户具有相同的名称,您得到的结果将只是一个包含一个对象的数组,因此您可以执行以下操作:

结果[0]。密码//获取第一个对象的密码字段

不确定这是否解决了您的问题,但基于您的代码,这就是我在其中发现的问题。

您可以发布结果对象吗?我无法从powershell复制,但它返回以下内容:
[{u id:123456,name:'username',password:'yourpassword'}]
(再加上一些目前不重要的数据)您可以发布结果对象吗?我无法从powershell复制,但它返回以下内容:
[{{u id:123456,name:'username',password:'yourpassword'}]
(再加上一些目前不重要的数据)噢,我在去bug过程中感到困惑,因为我第一次错误地调试了res[0]而不是结果[0]并且认为数组是空的。。。。现在一切又变得有意义了:)哦,我在去bug过程中感到困惑,因为我第一次错误地调试了res[0]而不是结果[0],并认为数组是空的。。。。现在一切都有了意义:)