在选项对象中声明uri时,request-promise无法重新识别uri

时间:2019-06-01 07:11:41

标签: http request-promise

我有一个应从另一台服务器返回响应的方法。我使用request-promise并将URL放在option对象中。 正如您在下面的代码中看到的那样,所有状态都很好,但是当我发送请求时,它返回404-找不到资源。我没有指出正确的uri。 当我将request(option)与request(“ https://api.quickpay.net/payments”)交换时,我从服务器得到肯定的答复。然后它告诉我添加标题等等,这是肯定的。

    public requestNewQuickpayPayment(order_id: String, currency : String, callback: Function) {

        var options = {
            method: 'POST',
            uri: 'https://api.quickpay.net/payments',
            form:{
                order_id : "order123",
                currency : "dkk"
            },
            headers: {
                "Content-Type" : "application/json",
                'Accept-Version': 'v10'
              },
            json: true
        };
        request(options).then((response:any)=>{
            console.log(response);
            return response;
        }).catch((error:any)=>{
            console.log(error);
            return error;
        }).finally(()=>{
            console.log("done");

        })
    }

控制台上的内容

      Request {
        _events: [Object],
        _eventsCount: 5,
        _maxListeners: undefined,
        method: 'POST',
        uri: [Url],
        transform2xxOnly: true,
        headers: [Object],
        readable: true,
        writable: true,
        explicitMethod: true,
        _qs: [Querystring],
        _auth: [Auth],
        _oauth: [OAuth],
        _multipart: [Multipart],
        _redirect: [Redirect],
        _tunnel: [Tunnel],
        _rp_resolve: [Function],
        _rp_reject: [Function],
        _rp_promise: [Promise],
        _rp_callbackOrig: undefined,
        callback: [Function],
        _rp_options: [Object],
        setHeader: [Function],
        hasHeader: [Function],
        getHeader: [Function],
        removeHeader: [Function],
        localAddress: undefined,
        pool: {},
        dests: [],
        __isRequestRequest: true,
        _callback: [Function: RP$callback],
        proxy: null,
        tunnel: true,
        setHost: true,
        originalCookieHeader: undefined,
        _disableCookies: true,
        _jar: undefined,
        port: 443,
        host: 'api.quickpay.net',
        body: 'order_id=asdasdasd&currency=dkk',
        path: '/payments',
        _json: true,
        httpModule: [Object],
        agentClass: [Function],
        agent: [Agent],
        _started: true,
        href: 'https://api.quickpay.net/payments',
        req: [ClientRequest],
        ntick: true,
        response: [Circular],
        originalHost: 'api.quickpay.net',
        originalHostHeaderName: 'host',
        responseContent: [Circular],
        _destdata: true,
        _ended: true,
        _callbackCalled: true },
     toJSON: [Function: responseToJSON],
     caseless: Caseless { dict: [Object] },
     body: '404 Not Found' } }

这是怎么了?多次检查资源的路径-那里没有什么问题。...

1 个答案:

答案 0 :(得分:0)

对于api.quickpay.net404 Not Found并不意味着无法识别URI,而是表示无效的请求正文。 URI是在options对象中声明还是在request()的字符串参数中声明都没有关系。

这是一个简单的实验。以下代码将返回“正”结果,警告标头({"error":"Accept-Version http header is required"})丢失,这表明URI被“识别”:

request({
  method: 'POST',
  uri: 'https://api.quickpay.net/payments'
}, function(err, res, body) {
  console.log(body);
});

但是,在添加缺少的Accept-Version标头之后,我们得到404 Not Found

request({
  method: 'POST',
  uri: 'https://api.quickpay.net/payments',
  headers: {
    'Accept-Version': 'v10'
  }
}, function(err, res, body) {
  console.log(body);
});

因此,为了使API调用正常工作,您需要使HTTP请求有效(遵循document)。