конечная точка REST узла koa и sqlite3, возвращающая только объект базы данных вместо данных - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть простая настройка маршрута GET с Koa и sql3lite, которая извлекает из файла json некоторые данные с использованием оболочки.

Вспомогательная оболочка sql3lite предоставляет функцию инициализации для основного сервера index.js файл для загрузки в память при запуске:

index.js

const data = require('./data');

data.initialize();

const server = createServer();

server.listen(PORT, () => {
  console.log(`server listening on port ${PORT}`);
});

Файл data.js служит оболочкой для sqlite3 библиотека узлов, поэтому маршруты могут вызывать метод connection() индивидуально.

data.js

const connection = new sqlite3.Database(':memory:');

function initialize() {
  connection.serialize(() => {
    connection.run('CREATE TABLE meter_reads (cumulative INTEGER, reading_date STRING, unit STRING)');

    const { electricity } = sampleData;
    electricity.forEach((data) => {
      connection.run(
        'INSERT INTO meter_reads (cumulative, reading_date, unit) VALUES (?, ?, ?)',
        [data.cumulative, data.readingDate, data.unit],
      );
    });
  });
}

module.exports = {
  initialize,
  connection,
}; 

Проблема У меня возникла проблемаотправляет объект данных обратно клиенту или почтальону при вызове экспортированного метода connection:

маршрут коа

const db = require('../data');
router.get('/meter/readings', async (ctx, next) => {
  ctx.body = await db.connection.all('SELECT * FROM meter_reads', (err, data) => data);
});

GET запрос на маршрутизациюрезультат : { "open": true, "filename": ":memory:", "mode": 65542 }

Интересная причуда:

Оборачивая объект data, полученный с помощью метода db.connection.all(), описанного выше, в console.log(),Я могу распечатать ожидаемые данные на сервере узла.Это почти как ctx.body что-то напортачил.До сих пор я был опытным парнем, поэтому извиняюсь, если это ошибка новичка!

1 Ответ

0 голосов
/ 11 октября 2018

Ответ GMS здесь: https://github.com/mapbox/node-sqlite3/issues/1046#issuecomment-425643910

'all' не возвращает никакого значения (возвращает результат путем вызова данного обратного вызова), так что вы фактически ожидаете 'db.connection' в этой строкеВ коде есть несколько библиотек, основанных на node-sqlite3, предоставляющих API, основанный на обещаниях и более, например, https://www.npmjs.com/package/sqlite или моя: https://www.npmjs.com/package/sqlite3orm

...