#javascript #node.js #sequelize.js
#javascript #node.js #sequelize.js
Вопрос:
У меня есть сервер NodeJS с множеством вызовов
Один получает всех пользователей:
export function findAll(req, res) {
Users.findAll()
.then(data => {
res.send(data);
})
.catch(err => {
...
});
}
И один, чтобы получить пользователя на основе его идентификатора:
export function findOne(req, res) {
const userId = req.params.id;
Users.findByPk(userId)
.then(data => {
res.send(data);
})
.catch(err => {
...
});
}
Работа с результатом поиск всех пользователей работает нормально, и пользователи получают обновленные данные о результате с помощью:
axios
.get('https://.../api/users')
.then (res => {
this.users = res.data;
})
Но получение пользователя по идентификатору не работает:
axios
.get('https://.../api/users/' id)
.then (res => {
this.users = res.data;
})
Из документов я вижу, что данные из findAll возвращают обещание массива <Array< Model >>, но findByPk возвращает обещание объекта< Model> . Таким образом, я получаю это для всех пользователей:
[ { "id": 1, .... }, {"id": 2, .... } ]
Но из-за вызова ID (без скобок [ ]), приводящего к ошибке:
{ "id": 1, .... }
Итак, я попытался изменить метод findByPk на:
const userId = req.params.id;
Users.findAll({where: {id : userId}})
но это все равно возвращает объект, а не массив из 1.
Во-первых, почему вызов findAll({where: {id: userId}}) не возвращает массив, как это делает вызов all users ? Во-вторых, если это так, как есть, как мне обновить пользователей с помощью данных объекта? Я пытался:
var self = this
axios
.get('https://.../api/users/' userId)
.then (res => {
Object.keys(res.data).forEach(function(key) {
self.users[key] = res.data[key]
})
})
безуспешно.
Комментарии:
1. Предполагается, что ваша конечная точка user-by-id должна возвращать одного пользователя, а не массив. Если вы по какой-то причине все еще хотите сохранить их в массиве, вам следует сделать
axios.get('https://.../api/users/' id).then (res => { this.users = [res.data]; })
.2. @Bergi Отлично — ваш комментарий решает проблему, спасибо. Но почему Users.findAll({where: {id: userId}}) не возвращает ни одного массива из 1? Users.findAll() выполняет, если в БД есть только одна запись.
3. Понятия не имею, насколько я понимаю, так и должно быть, но я не использую mongodb.
4. @Берги Оки доук. Ваш ответ мне очень помог. На самом деле это postgresql. Я тоже не использую монго, так что понятия не имею, как это выглядит. Еще раз спасибо.
5. О, это было похоже на какую-то модель схемы мангуста. Если вы используете postgres, как создается эта модель, что именно это
User
такое? Какой библиотекой вы пользуетесь?