#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, а затем выбрать эту запись для возврата вызывающему?