Цепочка методов javascript - knex.js

Я разработчик PHP и для нового проекта решил использовать серверную часть node.js. Так что я новичок в этом.

Я использую knex.js для обработки подключения к базе данных и управления данными. F.ex У меня такой запрос:

let gastronomies = await knex
  .from('user')
  .innerJoin('profile', 'user.id', 'profile.user_id')
  .where('user.status', 1);

Если клиент передает в функцию дополнительную переменную, ее следует использовать как другой параметр запроса.

if (args.lat) {
    gastronomies = await knex
    .from('user')
    .innerJoin('profile', 'user.id', 'profile.user_id')
    .where('user.status', 1)
    .where('lat', 'like', args.lat); //there it is
  }

Я хотел бы связать методы, но это совсем не работает. Вот что я придумал:

let gastronomies = await knex
  .from('user')
  .select('*', {key: 'user.id'})
  .innerJoin('profile', 'user.id', 'profile.user_id')
  .where('user.status', 1);

if (args.lat)
    gastronomies.where('lat', 'like', args.lat);

Но там сказано, что в гастрономии нет метода под названием «где». Какие-либо предложения?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
358
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ознакомьтесь с документацией - вы можете передать несколько предложений where, используя объект:

.where({ first_name: 'Test', last_name: 'User' })

http://knexjs.org/#Builder-where

Ответ принят как подходящий

Если вы хотите связать его, вы должны подождать с async/await, потому что он вызовет вызов базы данных. Я бы так сделал:

const gastronomies = knex // no await here
  .from('user')
  .select('*', {key: 'user.id'})
  .innerJoin('profile', 'user.id', 'profile.user_id')
  .where('user.status', 1);

if (args.lat)
    gastronomies.where('lat', 'like', args.lat);

const response = await gastronomies;

Вы также можете проверить ответ на свой вопрос с обещаниями здесь: Могу ли я условно добавить предложение where () к моему запросу knex?

Ваш ответ работает, спасибо! Я строю свой запрос без "ожидания", связываю его с моими условиями, а после этого я просто делаю "return await gastronomies", и он отлично работает!

widdy 02.05.2018 09:03

Другие вопросы по теме