【问题标题】:How do I do a request.write(body) without the body?如何在没有正文的情况下执行 request.write(body)?
【发布时间】:2018-10-11 08:54:38
【问题描述】:

我正在使用如下所示的代码。但是我想在查询字符串中包含正文(我可以做得很好) - 但是,我不确定如何重组https.request 以删除request.write(body) - 仅使用request.write() 不起作用,因为它需要一个字符串。

有人可以帮忙吗?

谢谢

var body = JSON.stringify( json.text );
const params = {
    'q': body,
};

var requestUrl = url.parse( URL + queryStringify(params) );
const requestOptions = {
    hostname: requestUrl.hostname,
    path: requestUrl.path,
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
    }
};

var request = https.request(requestOptions, function(res) {
var data = "";
    res.on('data', function (chunk) {
//do stuff
});
    res.on('end', function () {
//do stuff
    });        
});
request.write(body);
request.end();

【问题讨论】:

    标签: node.js https request httprequest


    【解决方案1】:

    为此,您可以在path 字段中设置参数,querystring 如下所示:

    将您的查询字符串参数设置为 requestOptions

    const querystring = require('querystring');
    requestOptions.path = `/your/Path?${querystring.stringify({firstName: 'John', lastName: 'doe'})}`;
    // Result is '/your/Path?firstName=John&lastName=doe'
    

    那么,按照你的要求去做

    var request = https.request(requestOptions, function(res) {
        res.on('data', function(chunk) {
            // Do stuff
        });
        res.on('end', function() {
            // Do stuff
        });
    });
    request.on('error', function (err) {
        // Throw err
    });
    request.end();
    

    希望对你有帮助。

    【讨论】:

    • 嗨 - 感谢您的回复。我添加了更多代码来显示我如何添加查询参数 - 但是响应似乎在q 中没有发送任何内容。但是,如果我输入完整的 url(从 context.log 中检索 - 那么它确实返回正确的数据)
    • 似乎我发送了q=null - 我是否需要以某种方式编码/更改body
    • 你能在 JSON.stringify 之后 console.log "body" 吗?
    • 是的 - 结果是正确的,您的 URL 可以与查询字符串等一起使用,因为当我将其输入 Chrome 时,它​​会返回数据。但是,当使用 https.request 时,它似乎没有发送有效的 q 或者它仍然希望发送一个正文,因此它为空 - 我不确定它为什么会发生
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 2017-02-02
    • 2017-08-31
    • 2018-11-23
    相关资源
    最近更新 更多