【发布时间】: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