为什么我的 http 请求不适用于长 JSON 字符串

Why doesn't my http request work for long JSON string?

本文关键字:JSON 字符串 适用于 不适用 我的 http 请求 为什么      更新时间:2023-09-26
var http = require('http');
var qhttp = require('q-io/http');
var formidable = require('formidable');
var categories;
qhttp.read("https://api.myjson.com/bins/509wa")
 .then(function (json) {
  categories = JSON.parse(json).categories;
 })
 .then(null, console.error);

module.exports.putCat = function(req, res){
    var form = new formidable.IncomingForm();
    form.parse(req, function(error, fields, files){
        if(error){console.log(error)}
        fields["catProd"] = [];
        categories.push(fields);
        var dataString = JSON.stringify({categories: categories});
        console.log(dataString);
        var options = {
            host : "api.myjson.com",
            path : "/bins/509wa.json",
            method: "PUT",
            headers: {"Content-Type": "application/json", "Content-Length": dataString.length}
        };
        function callback(response){
            var body = "";
            response.on('data', function(chunk){
               body+=chunk; 
            });
            response.on('end', function(){
                console.log('Received data: '+body);
            });
        }
        http.request(options, callback).write(dataString);
        res.end();
    });
};

截图

它与类似的东西完美配合 JSON.stringify("hello":"world"); .但是,当我尝试使用需要存储的数据(更长(时,它不会向 API 发送任何内容。提前感谢!

您有一个与 categories 变量争用的条件。 如果某些外部代码调用在加载模块后快速putCat(),则categories数据可能尚不可用。

如果你有异步模块加载事情要做,那么你可能应该公开一个返回承诺的模块构造函数,然后你可以在该承诺解析后执行putCat()