Javascript 如何通过查询sqlite3数据库从行返回值?
我正在为一些基于sqlite3的expressjs应用程序编写一些数据库中间件。 这是我的目录结构:Javascript 如何通过查询sqlite3数据库从行返回值?,javascript,node-sqlite3,Javascript,Node Sqlite3,我正在为一些基于sqlite3的expressjs应用程序编写一些数据库中间件。 这是我的目录结构: | app | database index.js | routes index.js database/index.js包含: module.exports.getLinkById=函数(id){ get(`SELECT redir FROM root WHERE id=“${id}”`,[],函数(err,row
| app
| database
index.js
| routes
index.js
database/index.js包含:
module.exports.getLinkById=函数(id){
get(`SELECT redir FROM root WHERE id=“${id}”`,[],函数(err,rows){
试一试{
变量行=行;
console.log(row.redir);//成功地使用正确的值记录redir attr
返回行;
}捕获(e){
投掷e;
}
});
};
而routes/index.js包含:
var-database=require('../database');
console.log(database.getLinkById(“afb8”);//未定义
在database/index.js文件中,选择并返回基于id的行。对于调试,我console.log()
ged它并记录正确的值。
然而,即使我返回了行
值,routes/index.js仍将其视为未定义。
如何正确地
返回
值,以便在routes/index.js
中访问该值?这是一个不返回任何内容的异步函数
只需返回express的响应:
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
})
});
});
如果需要同时运行更多代码,请参阅:
中间件所需功能,添加到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 });
});
});
};
它是一个不返回任何内容的异步函数 只需返回express的响应:
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
})
});
});
如果需要同时运行更多代码,请参阅:
中间件所需功能,添加到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 });
});
});
};
这正是我所需要的,但我没有足够的能力知道如何在我的案例中实现它。你能和我分享一个片段吗?这正是我所需要的,但我没有足够的能力知道如何在我的案例中实现它。你能和我分享一个片段吗?显然我能做到,但我如何在中间件中实现它?@HackaTunes不幸的是,sqlite3不支持本机异步等待支持,如果你需要一个中间件,它必须执行异步等待。请在下面找到一个完整的工作示例。你可以一直向下滚动。我还更新了我的答案,以包含代码中最重要的部分。显然我可以做到这一点,但我如何在中间件中实现它?@HackaTunes不幸的是,sqlite3不支持本机异步等待支持,如果您需要一个中间软件,它必须执行异步等待。请在下面找到一个完整的工作示例。你可以一直向下滚动。我还更新了我的答案,以包含代码中最重要的部分。