我對 node.js 和 sequelize 和 js 中的 promises 比較陌生。但我不明白為什么即使用戶創建成功,我的程式也會給我回傳錯誤訊息。
我的續集模型,在這里閱讀檔案和一些答案,我添加了鉤子來加密密碼:
const Sequelize = require('sequelize');
const bcrypt = require('bcrypt');
const db = require('../util/config');
const User = db.define('user', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
allowNull: false,
primaryKey: true
},
userName: {
type: Sequelize.STRING(250),
allowNull: false
},
password: {
type: Sequelize.STRING,
allowNull: false,
},
type: {
type: Sequelize.INTEGER,
allowNull: false
}
},
{
hooks: {
beforeCreate: async (user) => {
const hashedPassword = await bcrypt.hash(user.password, 8);
user.password = hashedPassword;
}
}
}
);
module.exports = User;
這是我用來存盤用戶的中間件
const User = require('../models/user');
const Patient = require('../models/patient');
const bcrypt = require('bcrypt');
exports.newUser = (req, res, next) => {
const errors = validationResult(req);
console.log('REQUEST', req.body);
if (errors.isEmpty()) {
checkPerson(req.body).then((existPerson) => {
if (existPerson) {
checkUser(req.body).then((existUser) => {
if (!existUser) {
User.create(req.body)
.then((res) => {
res.status(201).json({ // 201 = OK, pero creado un recurso
message: 'Saved successfully',
data: {
generatedId: res.dataValues.id,
patientCreated: res.dataValues
}
})
})
.catch((error) => {
res.status(400).json({
message: 'Error while creating user',
DBError: error
})
});
} else {
res.status(200).json({
message: 'The person already has an user, please login'
})
}
})
} else {
res.status(200).json({
message: 'No person found with that id',
})
}
})
} else {
res.status(502).json({
message: 'Data validation error',
validationErrors: errors.array()
})
}
}
function checkPerson(payload) {
// console.log('checkPerson payload', payload)
const userType = payload.type;
switch (userType) {
case 1: // PATIENT
return new Promise(resolve => {
resolve(
Patient.findOne({
where: {
id: payload.patientId
}
}).then(user => { return user ? true : false })
)
})
}
}
function checkUser(payload) {
return new Promise(resolve => {
resolve(
User.findOne({
where: {
patientId: payload.patientId,
}
}).then((user) => {
return user ? true : false;
})
)
})
}
我的中間件檢查患者(在本例中)是否存在,然后檢查患者是否有用戶,如果沒有則創建它。但是我得到的回應是“創建用戶時出錯”,但如果我檢查資料庫,用戶已成功創建,但我不知道為什么,任何幫助表示贊賞。提前致謝
uj5u.com熱心網友回復:
看起來問題出在then子句中。您可能應該將其更改為其他內容,而不是res同時用于User.create回應和 HTTP 回應,例如:
.then((createResponse) => {
res.status(201).json({ // 201 = OK, pero creado un recurso
message: 'Saved successfully',
data: {
generatedId: createResponse.dataValues.id,
patientCreated: createResponse.dataValues
}
})
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/395553.html
