Обнаружена неопределенная привязка - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь получить данные из моей PostgreSQL базы данных через Knex на мой интерфейс, но я получаю эту ошибку:

Error: Undefined binding(s) detected when compiling SELECT.
Undefined column(s): [mdn]
query: select "mdn" from "asurion"."user_info" where "mdn" = ?

Вот моя бэкэнд-функция, которая делает запрос:

function prepareSearchResponse(dbResponse) {
  return dbResponse.map((dbobj) => {
    const pInfo =
      dbobj.message_json.sdes &&
      dbobj.message_json.sdes.events.find((obj) => obj.personalInfo);
    return {
      realTimeId: dbobj.mdn,
      endTime: dbobj.message_json.info.endTime,
      startTime: dbobj.message_json.info.startTime,
      conversation_id: pInfo ? pInfo.personalInfo.personalInfo.surname : "n/a",
      skill: dbobj.message_json.info.latestSkillName,
      operatorName: dbobj.message_json.info.latestAgentFullName,
      operatorId: dbobj.message_json.info.latestAgentId,
      entryPoint: pInfo ? pInfo.personalInfo.personalInfo.name : "n/a",
      ipAddress: dbobj.message_json.info.ipAddress,
      messageRecords: dbobj.message_json.messageRecords,
    };
  });
}

const getDeviceId = (req, res, db) => {
  let rId = req.params.rId;
  db.from("asurion.user_info")
    .where({ mdn: rId })
    .select("mdn")
    .then((items) => {
      if (items.length) {
        res.json(utils.prepareSearchResponse(items));
      } else {
        res.json({ dataExists: "false" });
      }
    })
    .catch((err) => console.log(err));
};

Кто-нибудь знает, что я делаю не так?

1 Ответ

1 голос
/ 03 апреля 2020

Ваш параметр роутера отсутствует. Если предположить Express, это обычно определяется следующим образом:

app.get('/devices/:rId', getDeviceId);

Если ваше определение маршрута правильное, возможно, вы не передаете его в URL-адресе запроса GET. Поэтому вы можете ожидать увидеть:

http://localhost:3000/devices/1234

или подобное. Если этот идентификатор отсутствует, это приведет к тому, что rId будет неопределенным.

Я тоже немного интересуюсь вашим запросом. Похоже, вы запрашиваете только один столбец, значение которого вы уже знаете. Поэтому вместо:

db.from("asurion.user_info")
  .where({ 'mdn': rId })
  .select("mdn")

вы можете начать со всех столбцов:

db
  .withSchema("asurion")
  .select("*")
  .from("user_info")
  .where({ "mdn": rId })

и сузить его оттуда, если необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...