#javascript #node.js #orm #adonis.js
#javascript #node.js #orm #adonis.js
Вопрос:
Я новичок в Adonis JS, поэтому прошу прощения за глупый вопрос.
У меня установлена настройка Adonis JS по умолчанию с базой данных Mysql, и все работает.
Я создал простой маршрут тестирования пользователя, в котором я возвращаю JSON пользователя с идентификатором: 1.
Ниже приведен код для того же
Route.get('/usertest', ({ response }) => {
const User = use('App/Models/User')
let data = User.query().where('id', 1)
.first()
console.log(data)
return response.status(200).json(data)
})
Но он возвращает пустой объект
Необработанный ответ:
{}
Ответ на запрос журнала консоли:
Promise { <pending> }
Я не могу понять, чего мне здесь не хватает.
Примечание: Я пытался let data = User.find(1)
, но это не сработало.
Пожалуйста, помогите мне.
Заранее спасибо!!!
Ответ №1:
Быстрое замечание, по крайней мере, вы должны выполнить запрос асинхронно.
Я имею в виду, вы должны заменить:
let data = User.query().where('id', 1)
.first()
Автор::
let data = await User.query().where('id', 1)
.first()
Конечно, это означает, что перед стрелкой функции вы должны указывать async
:
Route.get('/usertest', async ({ response }) => {
// rest of the code
let data = await User.query().where('id', 1).first()
// rest of the code
})
Комментарии:
1. Это решило проблему, спасибо, просто примечание, нужно добавить
async
для функции, в которой мы используемawait
2. Кстати, вы можете использовать ярлык для своего запроса:
let data = await User.find(1)
@AkshayKhale
Ответ №2:
Очень легко пропустить «await», когда вы начинаете работать с фреймворками с асинхронным ожиданием. Просто предложение по запросу всякий раз, когда вы хотите найти один объект, рекомендуется использовать предопределенную функцию ORM. В этом случае
const user = ожидает пользователя.findBy(‘id’,1)
это вернет первый найденный объект с заданным идентификатором. Вы найдете дополнительные опции и помощь в knex.js документы http://knexjs.org/#Builder-where