Я пытаюсь выполнить хранимую процедуру, разработанную в SQL Server, через пакет node-mssql. Для серверной части я использовал ExpressJS, клиентская часть разработана с использованием Angular.
Моя проблема: node-mssql
выполняет хранимую процедуру без проблем и возвращает no. пострадавших рядов. Но на стороне клиента, в консоли, я получаю сообщение об ошибке как нормальное, однако статус ответа в 200. Из-за этой ошибки страница не перенаправляется на следующую страницу. Кто-нибудь объяснит мне, это поможет мне решить эту проблему? Я не знаю, где я пропустил.
Я пытался вставить данные в БД в виде обычного запроса (без хранимой процедуры), используя метод req.query
. Он отлично работает как на стороне сервера, так и на стороне клиента. Я считаю, что сообщение об ошибке отображается только для req.execute
выполнения хранимой процедуры. Я предпочитаю использовать хранимую процедуру, а не обычную команду SQL для вставки данных в таблицу.
Требование POST HTTP на стороне клиента:
createFlexiClaim(userid: any, claimClass: any, flexiClaim): Observable<void> {
return this.http.post<void>(DBServerUtil.Uri + DBServerUtil.port + '/create/' + claimClass + '/' + userid, flexiClaim,
{
headers: new HttpHeaders({
'content-Type': 'application/json; charset=utf-8'
})
}
)
.pipe(catchError(this.handleError));
}
}
POST-запрос ExpressJS:
app.post('/create/:claimClass/:userid', function (req, res) {
// (sqlqry,ClaimWBS,Docdate,typeclaim,curr,AMT,typec,empid,empname,claimfor,forrela, callback)
// console.log(req.body.projectWbs + " : " + req.body.docDate + " : " + req.body.typeOfClaim + " : " + req.body.currencyKey + " : " + req.body.amount + " : " + req.params.claimClass + " : " + req.params.userid + " : " + req.params.userid + " : " + ":" + req.params.claimClass + " : " + req.params.userid)
queryExe.CreateclaimPromise('CREATECLAIMDTL',req.body.projectWbs, req.body.docDate, req.body.typeOfClaim, req.body.currencyKey, req.body.amount, req.params.claimClass, req.params.userid, req.params.userid, '', '', function (recordRet, err) {
if (err) {
res.send("Error from app.js : "+err)
} else {
console.log("Message from app.js : "+recordRet)
res.send("Message from app.js : "+JSON.stringify(recordRet))
}
})
})
node-mssql
запрос на подключение:
sql.connect(setting.dbconfig).then(pool => {
return pool.request()
.input('PROJWBS', sql.VarChar(10), ClaimWBS)
.input('DOCUMENTDATE', sql.Date, Docdate)
.input('TYPEOFSUBCLAIM', sql.Int, typeclaim)
.input('CURRENCY', sql.VarChar(5), curr)
.input('AMOUNT', sql.Money, AMT)
.input('CLAIMTYPE', sql.VarChar(10), typec)
.input('EMPLOYEEID', sql.VarChar(50), empid)
.input('EMPLOYEENAME', sql.VarChar(150), empname)
.input('CLAIMFOR', sql.VarChar(50), claimfor)
.input('RELATIONSHIP', sql.VarChar(50), forrela)
.execute(sqlqry)
}).then(result => {
// console.dir(result.recordset)
callback(result.rowsAffected)
sql.close()
}).catch(err => {
// console.log(err)
callback(err)
sql.close()
})
Мне нужна помощь, чтобы понять и помочь мне понять, почему эта ошибка возникает, когда код состояния равен 200, а сервер выполняет свою работу идеально.