koa和sqlite3节点REST端点仅返回数据库对象而不是数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了koa和sqlite3节点REST端点仅返回数据库对象而不是数据相关的知识,希望对你有一定的参考价值。
我有一个简单的GET路由设置,使用Koa和sqlite3从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
搞砸了什么。到目前为止,我一直是一个快速的人,所以如果这是一个新手的错误,请道歉!
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
以上是关于koa和sqlite3节点REST端点仅返回数据库对象而不是数据的主要内容,如果未能解决你的问题,请参考以下文章
调用从 react-app 返回 JSON 的 REST API