Angular клиент получает OK как ошибку для запроса POST от сервера с Expressjs - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь выполнить хранимую процедуру, разработанную в 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, а сервер выполняет свою работу идеально.

1 Ответ

0 голосов
/ 04 ноября 2019

HTTP 200 просто означает, что сервер возвращает нормальный ответ. Если вы поместите ошибку на сервере и отправите ее с ответом 200, в браузере будет отображаться 200.

Перед тем как написать ответ, необходимо проверить на стороне сервера, что вы получите после запроса БДкоторый вы собираетесь вернуть.

Я заметил, когда запрос выполняется, в случае ошибки;код вызывает тот же самый обратный вызов без отдельных аргументов для ошибки или результата. Так что трудно найти, когда произошла ошибка. Может быть использовать обратный вызов в форме

callback(err, success)

Используя эту форму обратного вызова, вы можете легко определить ошибки и случаи успеха в вашем обратном вызове.

Реальная проверка, которую вы можете сделать, это утешитьзарегистрируйте объект, который вы отправляете как ответ, чтобы увидеть, что отправлено обратно в браузер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...