You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS向SQL Server插入数据时出现Cannot Get(404)错误,请求帮忙修正代码

NodeJS向SQL Server插入数据时出现Cannot Get(404)错误,请求帮忙修正代码

嗨Jake,我来帮你梳理下问题所在,一步步帮你修正代码:

首先解决404错误的核心原因

你在浏览器里直接访问localhost:5000时,发送的是GET请求,但你的代码里只定义了处理POST请求的根路由(app.post('/', ...)),服务器找不到对应GET请求的处理逻辑,自然就返回了404错误。

然后看代码里的其他冗余/问题点

  1. 重复创建数据库连接:你同时调用了await sql.connect(config)和await pool.connect(),这属于重复操作,只需要用ConnectionPool管理连接池就足够了,没必要额外调用sql.connect。
  2. 连接池可以全局初始化:每次请求都创建新的连接池会浪费资源,建议在服务器启动时就初始化好连接池,后续请求复用即可。

修正后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:52:57