2 回答

TA贡献1865条经验 获得超7个赞
数据库将以异步方式初始化,因此您应该等到有数据库实例,然后保存它。
const express = require('express')
const sqlite = require('sqlite')
const sqlite3 = require('sqlite3')
const app = express()
let globalDatabase
sqlite
.open({ driver: sqlite3.Database, filename: 'test.sqlite' })
.then((database) => {
if(database){
database.all('SELECT * FROM cities').then(rows => {
console.log(rows)
})
globalDatabase = database
}
})
app.get('/', (request, response) => {
if(globalDatabase) {
globalDatabase.all('SELECT * FROM cities').then(cities => {
response.send(cities)
})
}else{
// todo whatever you want send error, or wait for db or initialize it again
}
})
app.listen(3000)

TA贡献1866条经验 获得超5个赞
看起来你的出现是未定义的,因为你在承诺中使用它,但没有分配它。您可以通过以下方式解决问题:database
let database
sqlite
.open({ driver: sqlite3.Database, filename: 'test.sqlite' })
.then((db) => {
// assign it here
database = db;
database.all('SELECT * FROM cities').then(rows => {
console.log(rows)
})
})
然后,您以后就可以使用它了。请记住,此承诺需要在请求转到 GET 终结点之前解决,否则它们也会失败。希望这有帮助
添加回答
举报