Node.js中sqlite3查询后window.alert无响应,console.log正常问题求助
问题解决思路
- 核心问题:
sqlite3是Node.js后端专属库,你的代码运行在Node环境中,不存在浏览器的window对象,所以typeof window !== "undefined"这个判断永远不成立,导致后续的alert代码根本没执行。 - 为什么
console.log正常?因为Node原生支持console.log输出到终端,但完全不支持浏览器端的window相关API。
修复方案
场景1:仅后端调试数据
直接用console.log替代alert,在Node终端查看结果:
const sqlite3 = require('sqlite3').verbose(); let db = new sqlite3.Database('./mybook.db', sqlite3.OPEN_READWRITE); let sql = 'SELECT option FROM beginner where option = "verb to be";'; db.all(sql, [], (err, rows) => { if (err) { throw err; } rows.forEach((row) => { console.log(row.option); // 终端会输出查询结果 }); });
场景2:在浏览器中展示数据
需要通过前后端分离的方式实现:后端提供接口返回数据,前端请求接口后调用alert。
后端(Node.js + Express)
const express = require('express'); const sqlite3 = require('sqlite3').verbose(); const app = express(); const port = 3000; let db = new sqlite3.Database('./mybook.db', sqlite3.OPEN_READWRITE); // 提供数据接口 app.get('/get-option', (req, res) => { let sql = 'SELECT option FROM beginner where option = "verb to be";'; db.all(sql, [], (err, rows) => { if (err) { res.status(500).send(err.message); return; } res.json(rows); }); }); // 启动服务 app.listen(port, () => { console.log(`服务运行在 http://localhost:${port}`); });
前端(HTML页面)
<!DOCTYPE html> <html> <body> <script> // 请求后端接口获取数据 fetch('http://localhost:3000/get-option') .then(res => res.json()) .then(rows => { rows.forEach(row => { alert(row.option); // 浏览器弹出结果 }); }) .catch(err => console.error(err)); </script> </body> </html>
内容的提问来源于stack exchange,提问作者mohamed
相关产品推荐
相关产品推荐

