#javascript #node.js #express #sequelize.js
#javascript #node.js #выразить #sequelize.js
Вопрос:
Итак, в моем экспресс-приложении у меня есть отдельный файл database.js , который содержит все модели и функции для вставки, удаления, обновления и т.д. У меня также есть отдельный контроллер для каждой модели.
database.js
module.exports = {
createUser: function (username, email, password) {
return sequelize.sync().then(function () {
User.findOrCreate({
where: {
username: name,
email: email
},
defaults: {
username: username,
password: password,
email: email
}
}).then(([user, created]) => {
console.log(user.get({plain:true}));
console.log(created)
});
});
}
};
controllers/user.js
const database = require("../database.js");
module.exports = {
register: function (req, res) {
database.createUser(req.body.username, req.body.email, req.body.password);
res.json({...
})
}
};
Итак, в основном я хочу получить объект user и логическое значение, которое сообщает мне, был ли он создан для маршрутизатора, чтобы я мог проверить, был ли создан пользователь, и дать соответствующий ответ.
Комментарии:
1. Зачем ты вообще звонишь
sequalize.sync()
createUser
? Это неправильно. Вы вообще не должны вызывать его в приложении. Вы можете непреднамеренно испортить свою базу данных (если вы поставите гдеforce: true
-нибудь флаг, то вы обречены), не говоря уже о накладных расходах на синхронизацию. Ониsequalize.sync()
должны выполняться только во время миграции.2. Также обещания могут связывать возвращаемое значение: ваш окончательный
.then
createUser
ввод может простоreturn [user, created];
сделать его доступным вuser.js
via.then()
.
Ответ №1:
Вы можете удалить then
в CreateUser и разрешить обещание при вызове функции:
module.exports = {
createUser: function (username, email, password) {
return User.findOrCreate({
where: {
username: name,
email: email
},
defaults: {
username: username,
password: password,
email: email
}
})
};
Затем обещание преобразуется в массив с объектом user и логическим значением, которое вы ищете
const database = require("../database.js");
module.exports = {
register: function (req, res) {
database.createUser(req.body.username, req.body.email, req.body.password)
.then((result) => {
const [ object, created ] = resu<
res.json({ user_is_created: created })
})
}
};
Это не полное решение, возможно, вам придется изучить крайние случаи и ошибки, но в основном так вы бы это сделали.