NodeJS向SQL Server插入数据时出现Cannot Get(404)错误,请求帮忙修正代码
NodeJS向SQL Server插入数据时出现Cannot Get(404)错误,请求帮忙修正代码
嗨Jake,我来帮你梳理下问题所在,一步步帮你修正代码:
首先解决404错误的核心原因
你在浏览器里直接访问localhost:5000时,发送的是GET请求,但你的代码里只定义了处理POST请求的根路由(app.post('/', ...)),服务器找不到对应GET请求的处理逻辑,自然就返回了404错误。
然后看代码里的其他冗余/问题点
- 重复创建数据库连接:你同时调用了
await sql.connect(config)和await pool.connect(),这属于重复操作,只需要用ConnectionPool管理连接池就足够了,没必要额外调用sql.connect。 - 连接池可以全局初始化:每次请求都创建新的连接池会浪费资源,建议在服务器启动时就初始化好连接池,后续请求复用即可。
修正后的完整代码
const express = require('express'); const sql = require('mssql'); const cors = require('cors'); const app = express(); app.use(cors()); app.use(express.json()); const config = { user: 'sa', password: 'password', server: 'ServerName\\MSSQL2019EX', database: 'Contacts', options: { encrypt: false, trustServerCertificate: false } }; // 全局初始化连接池,只执行一次 let pool; (async () => { try { pool = new sql.ConnectionPool(config); await pool.connect(); console.log('数据库连接成功'); } catch (err) { console.error('数据库连接失败:', err); process.exit(1); // 连接失败直接退出服务 } })(); // 添加GET路由,解决404问题,同时提示用户正确的请求方式 app.get('/', (req, res) => { res.send('请使用POST请求提交数据,请求体为包含name和email字段的JSON数组,例如:[{"name":"张三","email":"zhangsan@test.com"}]'); }); // 处理POST插入数据的路由 app.post('/', async (req, res) => { if (!pool) { return res.status(500).send('数据库未连接'); } try { const transaction = new sql.Transaction(pool); await transaction.begin(); try { for (const user of req.body) { await new sql.Request(transaction) .input('name', sql.NVarChar, user.name) .input('email', sql.NVarChar, user.email) .query(`INSERT INTO Users (Name, Email) VALUES (@name, @email)`); } await transaction.commit(); res.sendStatus(200); console.log('数据插入成功'); } catch (err) { await transaction.rollback(); console.error('事务执行失败:', err); throw err; } } catch (error) { console.error('SQL操作错误:', error); res.status(500).send('数据库操作失败'); } }); app.listen(5000, () => { console.log('Server running on port 5000'); });
测试方式提醒
你不能再用浏览器直接访问localhost:5000来测试插入功能了,需要用API调试工具(比如Postman、Insomnia)或者用curl命令发送POST请求:
示例curl命令:
curl -X POST http://localhost:5000 -H "Content-Type: application/json" -d '[{"name":"Jake","email":"jake@example.com"}]'
备注:内容来源于stack exchange,提问作者Jake Yambao
相关产品推荐
相关产品推荐

