【问题标题】:How to know which params is missing in a query?如何知道查询中缺少哪些参数?
【发布时间】:2019-05-29 09:30:39
【问题描述】:

我在 NodeJS 中设置了一个 Booking 路由器,并且我有很多参数。 现在,当我忘记参数时,我会返回如下错误:

500:需要更多信息

我想知道返回错误代码时是否可以知道缺少哪些参数。

这是一个用 NodeJS 制作的新 API

这是我想从前面检索的参数(用 ReactJS 制作)

let body = {
        agentDutyCode: "STRING",
        RatePlanCode: params.rateCode,
        RoomCode: params.roomCode,
        AmountAfterTax: params.amountTax,
        Start: params.fromDate,
        End: params.toDate,
        CardCode: params.cardCode,
        CardNumber: params.cardNumber,
        ExpireDate: params.expireDate,
        SeriesCode: params.cvv,
        CardHolderName: params.nameCard,
        ChainCode: params.chainCode,
        HotelCode: params.hotelCode,
        RoomQuantities: params.roomQuantities,
        GuestQuantitie: params.numberGuest,
        GuestPerRoom: params.guestPerRoom,
        LastName: params.lastName,
        FirstName: params.firstName,
        PhoneNumber: params.phoneNumber,
        email: params.email,
        FVL_SUBUNIT_7: params.walletAddress
    }

这是我的承诺:

 cdsJson.bookResource(req.body)
        .then((response) => {
            if (response !== null) {
                res.response = {
                    ...response
                }
            } if (response.hotel.length === 0) {
                res.respStatus = 500
                res.response = {
                    sendMsg: "Need more informations"
                }
                next('route')
            }
            return response
        })

如果请求成功,我会得到一个预订 ID,否则我会得到:

错误 500:需要更多信息

【问题讨论】:

    标签: javascript node.js api express


    【解决方案1】:

    阅读文档或源代码。

    说真的。如果 API 响应没有在错误消息中告诉您,则无法以编程方式知道它需要哪些参数。

    【讨论】:

    • 谢谢你,我认为你是对的。我会打电话给 API 管理员。
    【解决方案2】:

    尝试像这样的for ... in 循环:

    cdsJson.bookResource(req.body)
    .then((response) => {
        if (response !== null) {
            res.response = {
                ...response
            }
        } if (response.hotel.length === 0) {
            res.respStatus = 500
    
            let errorStr = "Need more informations"
    
            for(var key in req.body) { // Get all parameters that are not set
                if(objects[key] == undefined)
                    errorStr += "\nParameter ["+key+"] is missing!"
            }
    
            res.response = {
                sendMsg: errorStr
            }
            next('route')
        }
        return response
    })
    

    【讨论】:

    • 谢谢,你的方法不起作用,因为我调用的API不是我的。
    • 你写了this is my promise。所以我假设这是你的代码吗? @EythanFellous
    • 那你为什么不能改变它呢? @EythanFellous
    • 误会了^^,API 不会返回任何关于缺少什么或哪些参数错误的信息。
    • 是的,没错,但您仍然可以检查您发送的内容。这样您就可以向用户提示缺少哪些参数。 @EythanFellous
    【解决方案3】:

    您正在尝试进行服务器端验证。在 Node 中,一个好的方法是为预期参数定义 JSON Schema,然后在您的路由处理程序中使用 JSON Schema 验证器验证请求中发送的数据。这将帮助您确定请求是否有效并且帮助您自动生成错误消息。通常,使用使您能够以声明方式(通过模式)声明验证的工具(即更简单且更易于维护)比强制编写代码来手动验证对象要好得多。

    【讨论】:

    • 我的代码中已经有一个验证器,但感谢您的引导
    猜你喜欢
    • 2016-05-17
    • 2022-12-03
    • 2019-07-25
    • 2021-01-18
    • 1970-01-01
    • 2013-05-19
    • 2017-10-06
    • 2021-08-09
    相关资源
    最近更新 更多