gpt4 book ai didi

node.js - ClientSession 无法序列化为 BSON

转载 作者:行者123 更新时间:2023-12-04 12:40:48 25 4
gpt4 key购买 nike

你好,我一直在尝试使用 mongoose 在我的 mongodb 图集上对我的 crud 操作实现交易,我试图查找教程和东西,但周围真的没有那么多,我有这个问题“ClientSession 不能在我尝试点击用户创建路由后序列化为 BSON”,我的代码:

router.post(
'/',
[
check('name', 'Por favor, ingresar el nombre')
.not()
.isEmpty(),
check('email', 'Por favor, ingresar un correo válido').isEmail(),
check(
'password',
'Por favor, ingresar una contraseña con 6 o más carácteres'
).isLength({ min: 6 })
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}

const { name, email, password, imagen } = req.body;

const session = await User.startSession() // Las transacciones usan sesiones
// const session = await mongoose.startSession() // Las transacciones usan sesiones
session.startTransaction() // Empezar una transacción

try {

const opts = {session} // Opciones de consulta del modelo

const user = await User.findOne({ email }, opts ); // Enviar opts para usar transac

if (user) {
return res
.status(400)
.json({ errors: [{ msg: 'Ya existe una cuenta creada con este correo' }] });
}

user = new User({
name,
email,
password,
imagen
});

const salt = await bcrypt.genSalt(10);

user.password = await bcrypt.hash(password, salt);

await user.save(opts);

const payload = {
user: {
id: user.id
}
};

jwt.sign(
payload,
config.get('jwtSecret'),
{ expiresIn: 360000 }, // Cambiar a 3600 en producción 3600s = 1 hora
(err, token) => {
if (err) throw err;
res.json({ token });
}
);

await session.commitTransaction(); // Commit de la transacción
session.endSession(); // Terminar la sesión
return true
} catch (err) {

await session.abortTransaction(); // Abortar o rollback de la transacción
session.endSession(); // Terminar la sesión
console.error(err.message);
res.status(500).send('Error del servidor');
}});

所以,我不太确定这意味着什么,我真的很想知道 Mongoose 交易的基本步骤是什么,以了解主要概念,谢谢。

最佳答案

我遇到过同样的问题。所以尝试更换

const user = await User.findOne({ email }, opts );

接着就,随即:
const user = await User.findOne({ email }, null, opts );

它解决了我的问题:)

关于node.js - ClientSession 无法序列化为 BSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59461391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com