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 終結點之前解決,否則它們也會失敗。希望這有幫助
添加回答
舉報