Я новичок в узле и изучаю все о обещаниях и pg-prom. Это то, что я хочу сделать, используя Экспресс и Pg-обещание:Как связывать утверждения вместе с помощью обещаний
- проверить электронную почту,
- если не найдено, проверьте имя пользователя,
- если не найдено создать новый пользователь.
- возвращение идентификатор пользователя
Я получил мой репо установить (db.users), который делает SQL, который работает большой.
В моем обработчике полномочий я не уверен, как заставить вызовы репо следовать друг за другом. Синтаксис кажется мне неуклюжим. Вот что у меня есть до сих пор:
exports.signup = function(req, res, next) {
const username = req.body.username;
const email = req.body.email;
const password = req.body.password;
// See if a user with the given email exists
db.users.byEmail({email: email})
.then(user => {
if (user) {
return res.status(422).send({ error: 'Email is in use'});
} else {
return null; <-- must I return something here?
}
})
.then(() => {
db.users.getUsername({username: username})
.then(user => {
if (user) {
return res.status(422).send({ error: 'Email is in use'});
} else {
return null; <-- must I return something here?
}
...etc
})
Возможно, pg-promises не соединяются вместе так? Должны ли они быть вложенными друг в друга или быть полностью отдельными блоками? Кроме того, не совсем уверен, куда идет улов. Я пробовал все, о чем я могу думать, следуя различным учебным пособиям, но я получаю такие ошибки, как «не могу установить заголовки, которые уже установлены», а «обещания не возвращаются». Если какой-либо человек может мне помочь, я бы очень признателен.
Это именно то, что 'пг-promise' документация говорит нам никогда не делать: https://github.com/vitaly-t/pg-promise/wiki/Common-Mistakes#tasks-versus-rootdirect- запросы. И если это не так уж плохо, его запросы зависят, они не могут выполняться независимо. –
@ vitaly-t Да. Ты прав. Спасибо, что указали это. Вы можете ответить – Sridhar