【问题标题】:koa and sqlite3 node REST endpoint returning only Database object instead of datakoa 和 sqlite3 节点 REST 端点仅返回数据库对象而不是数据
【发布时间】:2019-03-02 06:41:36
【问题描述】:

我有一个使用 Koa 和 sql3lite 的简单 GET 路由设置,它使用包装器从 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 方法时将数据对象发送回客户端或邮递员:

koa 路线

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 }

有趣的怪癖:

通过用console.log() 包装上面db.connection.all() 方法生成的data 对象,我可以在节点服务器上打印出预期的数据。这几乎就像ctx.body 搞砸了一样。到目前为止,我一直是个快递员,如果这是一个菜鸟的错误,我深表歉意!

【问题讨论】:

    标签: node.js sqlite async-await koa


    【解决方案1】:

    GMS 在这里回答: https://github.com/mapbox/node-sqlite3/issues/1046#issuecomment-425643910

    'all' 不返回任何值(它通过调用给定的回调返回结果),因此您实际上在这行代码中等待 'db.connection' 有一些基于 node-sqlite3 的库提供基于 Promise 的 API 等等 例如 https://www.npmjs.com/package/sqlite 或我的: https://www.npmjs.com/package/sqlite3orm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-28
      • 2017-02-02
      • 2018-04-17
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多