window.alert() 仅在浏览器环境中有效,而 require('sqlite3') 仅适用于 Node.js;二者无法共存于同一运行环境,需根据目标平台选择合适的数据存储方案与提示方式。
`window.alert()` 仅在浏览器环境中有效,而 `require('sqlite3')` 仅适用于 node.js;二者无法共存于同一运行环境,需根据目标平台选择合适的数据存储方案与提示方式。
在 Web 开发中,“如何向用户显示提示”看似简单,但实际取决于代码运行的环境——浏览器端(frontend) 还是 服务端/命令行(Node.js)。你提供的代码混合了两个互斥的环境特性,因此无法正常工作:
使用浏览器原生支持的 IndexedDB(推荐)或 localStorage 存储结构化数据,并用 alert() 或更友好的 UI 方式提示用户:
// 示例:使用 IndexedDB 查询并提示function showAlertForOption() { const request = indexedDB.open('MyBookDB', 1); request.onsuccess = function(event) { const db = event.target.result; const transaction = db.transaction(['beginner'], 'readonly'); const store = transaction.objectStore('beginner'); const index = store.index('option'); // 需提前创建索引 const getRequest = index.get('verb to be'); getRequest.onsuccess = () => { if (getRequest.result) { alert(getRequest.result.option); // ✅ 安全可用 } }; };}
⚠️ 注意:IndexedDB 是异步、事务型、客户端数据库,需初始化数据库、创建对象仓库及索引,不可直接类比 SQLite 的 SQL 查询。
移除所有浏览器专属 API(window, document, alert),改用终端输出或构建 HTTP 接口供前端调用:
const sqlite3 = require('sqlite3').verbose();const db = new sqlite3.Database('./mybook.db', sqlite3.OPEN_READWRITE);const sql = 'SELECT option FROM beginner WHERE option = ?';db.all(sql, ['verb to be'], (err, rows) => { if (err) throw err; rows.forEach(row => { console.log('✅ Found:', row.option); // ✅ Node.js 中唯一可靠提示方式 });});
? 提示:若需“向用户弹窗”,应由前端发起请求(如 fetch('/api/options')),后端返回 JSON 数据,前端再调用 alert() 或渲染 Modal。