Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.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/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 Express Node.js异步承诺对齐问题_Javascript_Node.js_Express_Asynchronous_Mongoose - Fatal编程技术网

Javascript Express Node.js异步承诺对齐问题

Javascript Express Node.js异步承诺对齐问题,javascript,node.js,express,asynchronous,mongoose,Javascript,Node.js,Express,Asynchronous,Mongoose,我在一个web应用程序中有一个登录名,它从MongoDB读取数据,并使用lodash将其排序到排序数组中。问题是我的console.log(“sortedin/api/login:,sorted”)不返回任何内容,这不会使console.logoutput-yeet。。。我该如何解决这个问题?我已经试着多做一些等待,但这对我没有帮助。每个人都在谈论什么?我在网上找不到关于它的任何信息 var express = require('express'); const app = express();

我在一个web应用程序中有一个登录名,它从MongoDB读取数据,并使用lodash将其排序到排序数组中。问题是我的
console.log(“sortedin/api/login:,sorted”)不返回任何内容,这不会使
console.log
output-yeet。。。我该如何解决这个问题?我已经试着多做一些等待,但这对我没有帮助。每个人都在谈论什么?我在网上找不到关于它的任何信息

var express = require('express');
const app = express();
const User = require('./models/user.js');
var _ = require('lodash');
const sorted = [];
User.find({},{ firstname: 1, password: 1 }, async function(err, users) {
  const flattenUsers = _(users).map(({firstname, password}) => ([firstname, password])).flatten().value();
  console.log(flattenUsers);
  const sorted = await flattenUsers.reduce((a, e, i) => (i % 2 || a.push([]), a[a.length - 1].push(e), a), []);
  await console.log("sorted:", sorted);
});

app.post('/api/login', apiLimiter, async function (req, res){
  try  {
    console.log("sorted in /api/login:", sorted);
    console.log("Req firstname: ",req.body.firstname)
    const hashedPassword = await bcrypt.hash(req.body.password, 10);
    console.log("Hashed pw: ", hashedPassword);
    console.log(await bcrypt.compare('testtest',hashedPassword));
    // const user = { id: req.body.id, username: req.body.username, password: req.body.password };
    var user = new User({firstname: req.body.firstname, eMail: req.body.eMail, password: hashedPassword });
    sorted.forEach(async ([eMail, password]) => {
      await bcrypt.compare(password, users[eMail]).then((e, r) => {
        // r = true if hash = hashed pw
        console.log("Yeet");
      });
    });
    jwt2.sign({user}, 'secrethere', { expiresIn: '15min'}, (err, token) =>{
    res.json({
      token
    });
  });
  } catch (err) {
    res.status(500).send()
    console.log(err);
  }
});
My user.js:

const mongoose = require('mongoose');

const userSchema = mongoose.Schema({
  firstname: {
    type: String,
    required: true,
    unique: true
  },
  lastname: String,
  eMail: {
    type: String,
    required: true,
    unique: true
  },
  password: String,
  active: Boolean
});

module.exports = mongoose.model("User", userSchema);
更新

实施建议答案时出现的错误:

(节点:17080)未处理的PromisejectionWarning:ReferenceError:users 没有定义 在C:\Users\User\Documents\Carina\Canopus\src\app.js:252:38 在Array.forEach()处 在C:\Users\User\Documents\Carina\Canopus\src\app.js:251:12(节点:17080)未处理Promisejection警告:未处理的承诺 拒绝此错误源于在异步 函数没有catch块,或者拒绝了 未使用.catch()处理。(拒绝id:1)(节点:17080)[DEP0018] 弃用警告:未处理的承诺拒绝被弃用。在里面 未来,未经处理的拒绝承诺将终止合同 具有非零退出代码的Node.js进程。(节点:17080) 未处理的PromisejectionWarning:ReferenceError:未定义用户 在C:\Users\User\Documents\Carina\Canopus\src\app.js:252:38 在Array.forEach()处 在C:\Users\User\Documents\Carina\Canopus\src\app.js:251:12(节点:17080)未处理Promisejection警告:未处理的承诺 拒绝此错误源于在异步 函数没有catch块,或者拒绝了 未使用.catch()处理。(拒绝id:2)(节点:17080) 未处理的PromisejectionWarning:ReferenceError:未定义用户 在C:\Users\User\Documents\Carina\Canopus\src\app.js:252:38 在Array.forEach()处 在C:\Users\User\Documents\Carina\Canopus\src\app.js:251:12(节点:17080)未处理Promisejection警告:未处理的承诺 拒绝此错误源于在异步 函数没有catch块,或者拒绝了 未使用.catch()处理。(拒绝id:3)

更新2

(节点:11252)未处理的PromisejectionWarning:错误:数据和散列参数 必修的 在Object.compare(C:\Users\User\Documents\Carina\Canopus\node\u modules\bcrypt\bcrypt.js:209:17) 在C:\Users\User\Documents\Carina\Canopus\node\u modules\bcrypt\promises.js:29:12 在新的承诺() 在Object.module.exports.promise(C:\Users\User\Documents\Carina\Canopus\node\u modules\bcrypt\promises.js:20:12) 在Object.compare(C:\Users\User\Documents\Carina\Canopus\node\u modules\bcrypt\bcrypt.js:205:25) 在C:\Users\User\Documents\Carina\Canopus\src\app.js:252:20 在Array.forEach()处 在C:\Users\User\Documents\Carina\Canopus\src\app.js:251:12(节点:11252)未处理Promisejection警告:未处理的承诺 拒绝此错误源于在异步 函数没有catch块,或者拒绝了 未使用.catch()处理。(拒绝id:1)(节点:11252)[DEP0018] 弃用警告:未处理的承诺拒绝被弃用。在里面 未来,未经处理的拒绝承诺将终止合同 具有非零退出代码的Node.js进程。(节点:11252) 未处理的PromisejectionWarning:错误:数据和散列参数 必修的 在Object.compare(C:\Users\User\Documents\Carina\Canopus\node\u modules\bcrypt\bcrypt.js:209:17) 在C:\Users\User\Documents\Carina\Canopus\node\u modules\bcrypt\promises.js:29:12 在新的承诺() 在Object.module.exports.promise(C:\Users\User\Documents\Carina\Canopus\node\u modules\bcrypt\promises.js:20:12) 在Object.compare(C:\Users\User\Documents\Carina\Canopus\node\u modules\bcrypt\bcrypt.js:205:25) 在C:\Users\User\Documents\Carina\Canopus\src\app.js:252:20 在Array.forEach()处 在C:\Users\User\Documents\Carina\Canopus\src\app.js:251:12(节点:11252)未处理Promisejection警告:未处理的承诺 拒绝此错误源于在异步 函数没有catch块,或者拒绝了 未使用.catch()处理。(拒绝id:2)(节点:11252) 未处理的PromisejectionWarning:错误:数据和散列参数 必修的 在Object.compare(C:\Users\User\Documents\Carina\Canopus\node\u modules\bcrypt\bcrypt.js:209:17) 在C:\Users\User\Documents\Carina\Canopus\node\u modules\bcrypt\promises.js:29:12 在新的承诺() 在Object.module.exports.promise(C:\Users\User\Documents\Carina\Canopus\node\u modules\bcrypt\promises.js:20:12) 在Object.compare(C:\Users\User\Documents\Carina\Canopus\node\u modules\bcrypt\bcrypt.js:205:25) 在C:\Users\User\Documents\Carina\Canopus\src\app.js:252:20 在Array.forEach()处 在C:\Users\User\Documents\Carina\Canopus\src\app.js:251:12(节点:11252)未处理Promisejection警告:未处理的承诺 拒绝此错误源于在异步 函数没有catch块,或者拒绝了 未使用.catch()处理。(拒绝id:3)

更新3

现在我得到了这些错误:

(节点:14268)未处理的PromisejectionWarning:错误:数据和哈希 所需参数 在Object.compareSync(C:\Users\User\Documents\Carina\Canopus\node\u modules\bcrypt\bcrypt.js:167:15) 在C:\Users\User\Documents\Carina\Canopus\src\app.js:252:20 在Array.forEach()处 在C:\Users\User\Documents\Carina\Canopus\src\app.js:251:12(节点:14268)未处理Promisejection警告:未处理的承诺 拒绝此错误源于在异步 没有捕捉块的函数
const sorted = [];
User.find({},{ firstname: 1, password: 1 }, async function(err, users) {
  const flattenUsers = _(users).map(({firstname, password}) => ([firstname, password])).flatten().value();
  console.log(flattenUsers);
  const sorted = await flattenUsers.reduce((a, e, i) => (i % 2 || a.push([]), a[a.length - 1].push(e), a), []);
  await console.log("sorted:", sorted);
});
var express = require('express');
const app = express();
const User = require('./models/user.js');
var _ = require('lodash');

async function getSorted(){
const sorted = [];
let users = await User.find({},{ firstname: 1, password: 1 });
  const flattenUsers = _(users).map(({firstname, password}) => ([firstname, password])).flatten().value();
  console.log(flattenUsers);
  const sorted = await flattenUsers.reduce((a, e, i) => (i % 2 || a.push([]), a[a.length - 1].push(e), a), []);
  console.log("sorted:", sorted);
return Promise.resolve([sorted,users])
}
app.post('/api/login', apiLimiter, async function (req, res){


  try  {
  let [sorted,users] = await getSorted();
    console.log("sorted in /api/login:", sorted);
    console.log("Req firstname: ",req.body.firstname)
    const hashedPassword = await bcrypt.hash(req.body.password, 10);
    console.log("Hashed pw: ", hashedPassword);
    console.log(await bcrypt.compare('testtest',hashedPassword));
    // const user = { id: req.body.id, username: req.body.username, password: req.body.password };
    var user = new User({firstname: req.body.firstname, eMail: req.body.eMail, password: hashedPassword });
    sorted.forEach(async ([eMail, password]) => {
      let result = bcrypt.compareSync(password, users[eMail]);
        // result = true if hash = hashed pw
        console.log("Yeet");
      });
    });
    jwt2.sign({user}, 'secrethere', { expiresIn: '15min'}, (err, token) =>{
    res.json({
      token
    });
  });
  } catch (err) {
    res.status(500).send()
    console.log(err);
  }
});