Authorization error: undefined 'No callback function was given.'

Authorization error: undefined 'No callback function was given.'

所以我目前正在上 React 课程,但我在后端开发方面遇到了麻烦。在 Postman 中,我试图将电子邮件和密码发送到 http://localhost:3900/api/auth。当我在 Visual Studio 代码中查看我的终端时,它显示“错误:未定义 'No callback function was given.'”。我安装了 bycrpt,并尝试将 bcrypt.compare() 函数更改为:

bcrypt.compare(
req.body.password,
user.password,
function (_err, validPassword) {
  if (!validPassword)
    return res.status(400).send("Invalid email or password.");
  const token = user.generateAuthToken();
  res.send(token);
}
);
});

但我仍然遇到同样的错误。

我的原始代码如下所示:

const Joi = require("joi");
const bcrypt = require("bcrypt-nodejs");
const _ = require("lodash");
const { User } = require("../models/user");
const mongoose = require("mongoose");
const express = require("express");
const router = express.Router();

router.post("/", async (req, res) => {
const { error } = validate(req.body);
if (error) return res.status(400).send(error.details[0].message);

let user = await User.findOne({ email: req.body.email });
if (!user) return res.status(400).send("Invalid email or password.");

 const validPassword = await bcrypt.compare(req.body.password, user.password);
 if (!validPassword) return res.status(400).send("Invalid email or password.");

 const token = user.generateAuthToken();
res.send(token);
});

function validate(req) {
 const schema = {
 email: Joi.string().min(5).max(255).required().email(),
 password: Joi.string().min(5).max(255).required(),
};

return Joi.validate(req, schema);
}

module.exports = router;

我错过了什么???

此错误来自您正在使用的包。事实上,bcrypt-nodejs 目前已被弃用。我建议您将实现移至 bcryptjs。

https://www.npmjs.com/package/bcryptjs

找到更多信息

使用 bcryptjs,您的原始实现将像魅力一样工作