Nodejs не получает объект ответа от SQL Server Insert. наборы записей не определены

#node.js #sql-server #express #asynchronous

#node.js #sql-сервер #выразить #асинхронный

Вопрос:

Я создал простую функцию, которая добавляет пользователя в таблицу SQL Server. Транзакция работает, и данные добавляются в БД, но ответ из базы данных после вставки не возвращает тело вставленного объекта.

Функция:

 async function addPerson(person) {
    try {
        let pool = await sql.connect(config)
        let newPerson = await pool.request()
            .input('name', sql.VarChar, person.name)
            .input('last', sql.VarChar, person.last)
            .input('age', sql.Int, person.age)
            .execute('InsertPerson')
        console.log(newPerson)
        return newPerson.recordsets;
    }
    catch {
        console.log(error)
    }
}
 

Маршрут:

 // insert person to table
router.route('/people').post((request, response) => {

    let person = { ...request.body }

    dboperations.addPerson(person).then(result => {
        response.status(201).json(result)
    })

})
 

Хранимая процедура SQL Server InsertPerson :

 CREATE OR ALTER PROCEDURE dbo.InsertPerson
    @name VARCHAR(15),
    @last VARCHAR(15),
    @age INT
AS
BEGIN
    INSERT INTO person (name, last, age)
    VALUES (@name, @last, @age);

    RETURN 
END
 

Я следую этому видеоуроку, если это поможет: https://www.youtube.com/watch?v=Uvy_BlgwfLIamp;list=PLM39hJgCef42hVok8ZRRE4LpLD-5bOxBhamp;index=37

Метод Post запускается @ 31:30

Я предполагаю, что это связано с тем, как создается его хранимая процедура, но он этого не показывает, и мне трудно найти пример онлайн процедуры, возвращающей вставленное значение.

Комментарии:

1. Разве вы не можете использовать какой-нибудь ORM для этого? Например, Sequelize … я думаю, это вам очень поможет. Посмотрите на это. Он делает именно то, что вы хотите, например, в двух строках.

2. Я собирался изучить Sequelize сразу после прохождения этого руководства, я просто хотел получить основы. Для меня просто не имеет смысла, что his возвращает объект, а mines — нет, но я изучаю предложение OUTPUT в sql server. Если это не сработает, я просто продолжу.

3. Я не знаю, работаете ли вы над побочным проектом. Но если это программное обеспечение с длительной датой, имейте в виду, что может измениться не только ваша база данных, но и ее версии. Преимущество использования ORM заключается в том, что вам не нужно беспокоиться об обмене данными с вашей базой данных. Я надеюсь, вы добьетесь того, чего хотите, человек. Счастливого пути!

4. но ответ из базы данных после вставки не возвращает тело вставленного объекта. С чего бы это? Хранимая процедура не возвращает ничего, кроме статуса возврата по умолчанию, 0. Возможно, внутри хранимой процедуры вы имеете в виду захватить значение scope_identity() после инструкции insert, а затем выбрать эту запись для возврата вызывающему?