Javascript Express Node.js异步承诺对齐问题
我在一个web应用程序中有一个登录名,它从MongoDB读取数据,并使用lodash将其排序到排序数组中。问题是我的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();
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);
}
});