SQL与Postman交互提交日期失败,JSON解析报错求助
问题分析与解决步骤
你的报错是JSON解析失败,和SQL Server无关,问题出在请求体格式、字段匹配以及SQL写法上,以下是具体修复步骤:
1. 修复JSON格式错误
Postman请求体中ModificationDate: null这一行的冒号与null之间是全角空格,JSON规范只允许半角空格,直接替换为半角空格或去掉空格即可:
{ "Password": "password5", "CreationDate": "01-01-2024", "ActiveState": true, "ModificationDate": null }
2. 修复字段大小写不匹配问题
后端代码中读取的是req.body.password、req.body.creationdate这类小写/小驼峰字段,但Postman请求体用的是Password、CreationDate这类大驼峰命名,Node.js的body-parser默认区分大小写,会导致后端无法正确获取参数。
两种修复方式二选一:
- 统一Postman请求体的字段命名为小写:
{ "password": "password5", "creationdate": "01-01-2024", "activestate": true, "modificationdate": null }
- 后端调整为读取大驼峰字段:比如
req.body.Password、req.body.CreationDate
3. 修复SQL注入风险(核心)
直接将req.body内容拼接进SQL语句存在严重的SQL注入漏洞,必须改用参数化查询:
public async create(req: Request, res: Response): Promise<void> { await pool.query( `exec CrearUser @password = @p1, @creationdate = @p2, @activestate = @p3, @modificationdate = @p4`, [req.body.password, req.body.creationdate, req.body.activestate, req.body.modificationdate] ); res.json({ 'Text': 'User creado' }); }
如果使用的是mssql库,也可以用命名参数写法:
public async create(req: Request, res: Response): Promise<void> { await pool.query( `exec CrearUser @password = @password, @creationdate = @creationdate, @activestate = @activestate, @modificationdate = @modificationdate`, { password: req.body.password, creationdate: req.body.creationdate, activestate: req.body.activestate, modificationdate: req.body.modificationdate } ); res.json({ 'Text': 'User creado' }); }
4. 适配SQL Server日期格式
SQL Server默认识别YYYY-MM-DD格式的日期,你当前传入的01-01-2024可能被错误解析(比如识别为MM-DD-YYYY),建议将日期改为"2024-01-01"格式,或在后端转换为Date对象后传入参数化查询。
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

