如何通过查询sqlite3数据库从一行返回值



我正在为一些基于sqlite3的expressjs应用程序编写一些数据库中间件。这是我的目录结构:

| app
| database
index.js
| routes
index.js

database/index.js包含:

module.exports.getLinkById = function(id) {
Database.get(`SELECT redir FROM root WHERE id = "${id}"`, [], function(err, rows) {
try {
var row = rows;
console.log(row.redir); // successfully logs the redir attr with correct value
return row;
} catch (e) {
throw e;
}
});
};

和routes/index.js包含:

var database = require('../database');
console.log(database.getLinkById("afb8")); // undefined

在database/index.js文件中,会选择并返回基于id的行。为了调试,我console.log()对它进行了标记,并记录了正确的值。然而,即使我返回了row值,routes/index.js也将其视为未定义。如何正确地return值,以便在routes/index.js中访问它?

这是一个不返回任何内容的异步函数。

只需返回快递回复:

app.get("/api/user/:id", (req, res, next) => {
var sql = "select * from user where id = ?"
var params = [req.params.id]
db.get(sql, params, (err, row) => {
if (err) {
res.status(400).json({"error":err.message});
return;
}
res.json({
"message":"success",
"data":row
})
});
});

如果您需要在其旁边运行更多代码,请参阅:sqlite3 nodejs从表中获取值

中间件需要的功能,添加到database.js:

// Hack to look like node-postgres
// (and handle async / await operation)
db.query = function (sql, params) {
var that = this;
return new Promise(function (resolve, reject) {
that.all(sql, params, function (error, rows) {
if (error)
reject(error);
else
resolve({ rows: rows });
});
});
};

最新更新