I am using Koa2 with node-sqlite3 and am running into an issue where I can't get Koa to wait for the db call to return before returning the body
Simplified example:
app.get('/:name/:nickname', function (ctx) {
var queryParams = [ctx.params.name, ctx.params.nickname]
db.get("SELECT nickname FROM users WHERE name = ? AND nickname = ?", queryParams, function (err,result) {
if (result == null) {
console.log('Add new nickname')
db.run("INSERT INTO users (name, nickname) VALUES (?, ?)", queryParams)
ctx.body = 'Inserted user ' + ctx.params.nickname
} else {
console.log('Return existing nickname')
ctx.body = result.nickname
}
})
console.log('This is after')
})
Which always returns something like:
This is After
Add new nickname
How can I get koa to wait for the sqlite result?
edit
My apologies, it is a simple matter of a promise:
app.get('/:name/:nickname', async (ctx, next) => {
await new Promise((resolve, reject) => {
var queryParams = [ctx.params.name, ctx.params.nickname]
db.get("SELECT nickname FROM users WHERE name = ? AND nickname = ?", queryParams, function (err,result) {
if (result == null) {
// Add the name if not in DB
db.run("INSERT INTO users (name, nickname) VALUES (?, ?)", queryParams)
ctx.body = 'Inserted user ' + ctx.params.nickname
} else {
// Return nickname if in DB
ctx.body = row.nickname
}
resolve()
})
})
console.log('This is after')
})
via waffl
No comments:
Post a Comment