Angular客户端从Expressjs的服务器收到OK作为POST req的错误消息

我正在尝试通过node-mssql包执行在SQL Server中开发的存储过程。对于服务器端,我使用ExpressJS,而客户端是使用Angular开发的。

我的问题是:node-mssql执行存储过程没有任何问题,并返回否。受影响的行数。但是在客户端,在控制台中,我得到的错误为OK,但是响应状态为200。由于此错误,页面无法重定向到下一页。有人能帮我解释一下吗?我不知道我在哪里错过。

我尝试使用req.query方法将数据作为普通查询(没有存储过程)插入数据库。它在服务器端和客户端都可以正常工作。我相信仅对req.execute执行存储过程才响应该错误消息。我更喜欢使用存储过程而不是普通的SQL命令将数据插入表中。

客户端Http POST请求:

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));
  }
}

ExpressJS POST请求:

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,'',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',typec)
            .input('EMPLOYEEID',sql.VarChar(50),empid)
            .input('EMPLOYEENAME',sql.VarChar(150),empname)
            .input('CLAIMFOR',claimfor)
            .input('RELATIONSHIP',forrela) 
            .execute(sqlqry)
    }).then(result => {
        // console.dir(result.recordset)
        callback(result.rowsAffected)
        sql.close()
    }).catch(err => {
        // console.log(err)
        callback(err)
        sql.close()
    })

我需要帮助来理解和帮助我,为什么当状态代码为200并且服务器达到最佳状态时会出现此错误。

tomorrow065 回答:Angular客户端从Expressjs的服务器收到OK作为POST req的错误消息

HTTP 200仅表示服务器正在返回正常响应。如果将错误包装在服务器上并发送200响应,它将在浏览器上显示200。

您需要先在服务器端进行检查,然后再将响应写回,您将在返回数据库查询后得到什么。

当执行查询时,我注意到发生错误的情况;代码正在调用相同的回调,而没有错误或结果的单独参数。因此,很难找到何时发生错误。可能是形式的回调

callback(err,success)

使用这种形式的回调,您可以轻松地确定回调中的错误和成功案例。

您真正可以做的检查是控制台记录要发送的对象作为响应,以查看返回给浏览器的内容。

本文链接:https://www.f2er.com/3169247.html

大家都在问