【发布时间】:2026-01-05 12:10:01
【问题描述】:
我有以下场景:
user.js
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const db = require('./sql');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.post('/api/v1/users', async function (req, res) {
res.json(await db.post_newUser(req.body));
});
sql.js
var connectionString = {
user: 'user',
password: 'password',
server: 'server',
database: 'db',
options: {
encrypt: false
}
}
const sql = require('mssql');
module.exports = {
post_newUser: async function(data) {
sql.connect(connectionString)
.then(pool => {
return pool.request()
.input('name', sql.VarChar, data.name)
.input('mail', sql.VarChar, data.mail)
.execute('sp_post_newUser');
})
.then(result => {
return JSON.parse(result);
})
.catch(err => {
// ... error checks
})
}
}
sp_post_newUser
CREATE PROCEDURE [dbo].[sp_post_newUser]
@name varchar(100),
@mail varchar(100)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[users] ([name],[mail]) VALUES (@name, @mail)
DECLARE @userProfile varchar(MAX)
SET @userProfile = (SELECT * FROM users WHERE mail=@mail FOR JSON AUTO)
SELECT [userProfile] = @userProfile;
END
注意:我简化了代码以保持简短。任何语法错误都应该被忽略。 :-)
我的存储过程将数据存储在数据库中。同时,它返回了一个应该由api返回的表,但它总是空白。
【问题讨论】:
-
那是过于复杂的代码。如果要返回新条目,只需写
SELECT * from users where ...,不要FOR JSON,不要给变量赋值。 -
也试过了,但是api也没有返回结果
-
SQL 查询有效。如果代码中的某些内容没有,则代码需要修复,而不是查询。过于复杂的查询会带来问题,但并不能解决问题。数据库不返回 JSON,那么在您尝试将结果转换为 JSON 之前,原始代码是什么样的?
-
我知道 SQL 查询有效。我的问题是关于 nodejs 代码的。
-
原始查询可以返回多行,如果有多行相同的邮件。您可以在 INSERT 中使用OUTPUT clause 来返回新值,例如
INSERT .... OUTPUT inserted.* VALUES (...)
标签: node.js sql-server