Использование DATEADD в запросе SQL INSERT с хапи. js - PullRequest
0 голосов
/ 06 апреля 2020

Я хочу импортировать отметку времени unix (содержащуюся в полученном теле Json) в мою базу данных MS SQL как удобочитаемое время, используя Node.js. Поэтому я преобразовал объект запроса непосредственно в запрос вставки. Я установил тип данных "datetime" на сервере SQL.

Тело Json выглядит следующим образом:


{
  "device":"887B53",
  "data":"4660000000000062b4a8",
  "station":"1B2C",
  "rssi":"-123",
  "time":"1586096200"
} 

Я использую сервер хапи для маршрутизации:

  server.route({

        method: 'POST',
        path: '/',
        handler: async (request, h) => {

            try {

                const datetime = DATEADD(ss, request.payload.time, '19700101');

                await pool.query("INSERT INTO mytable(timestamp)VALUES('"+datetime+"')");

                return h.response('Callback received').code(200);
            }
            catch (err) {
                console.log("SQL Err", err.stack);
                return 'Error';
            }

        }

    });

Сначала он работал именно так, как я ожидал к. Но потом я что-то напутал, и это больше не работает. Я абсолютно не знаю, что произошло, и не могу найти проблему.

Выдается эта ошибка:

в Request._lifecycle (C: \ Users \ AW \ sqltest \ node_modules@hapi \ хапи \ Lib \ запрос js:. 365: 68) at processTicksAndRejected (внутренняя / process / task_queues. js: 94: 5) at asyn c Request._execute (C: \ Users \ AW \ sqltest \ node_modules@hapi \ hapi \ lib \ request. js: 274: 9)

1 Ответ

0 голосов
/ 06 апреля 2020

Предположительно, вы хотите dateadd() в запросе, а не в javascript. Что-то вроде:

try {
    const request = pool.request()
    request.input('mytimestamp', sql.VarChar, request.payload.time)
    await request.query(
        "INSERT INTO mytable(timestamp) VALUES(DATEADD(ss, @mytimestamp, '19700101'))"
    );
    return h.response('Callback received').code(200);
}

Обратите внимание, что при этом используется параметризованный запрос, а не добавление параметра в строку запроса, что является одновременно более безопасным и эффективным.

...