繁体   English   中英

nodejs mssql未在PUT上返回数据

[英]nodejs mssql not returning data on PUT

我有以下场景:

用户.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返回的表,但它始终为空。

我认为 post_newUser 函数有问题。 此函数不返回数据。 试试这样的代码

module.exports = {
    post_newUser: function(data) { 
        return sql.connect(connectionString)
        ...

或者在纯等待/异步上重写它

module.exports = {
    post_newUser: async function(data) { 
        const pool = await sql.connect(connectionString);
        const result = await pool.request()
                       .input('name', sql.VarChar, data.name)
                       .input('mail', sql.VarChar, data.mail)
                       .execute('sp_post_newUser');
        return JSON.parse(result);
        ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM