2017-10-15 140 views
1

我一直希望做的是做一個GET請求,然後操縱JSON數據存儲在一個變量,然後做出一個PUT請求。似乎無法找到關於此的文檔。也許我在想這個錯誤。一旦我有變量,我想要做下面的事情。我已將我的所有數據從GET請求保存到outputV3.json文件。流數據PUT請求

var outputJson = fs.readFileSync("outputV3.JSON"); 
outputJson = JSON.parse(outputJson); 

(function() { 
    for (let i = 0; i < outputJson.objects.length; i++) { 
    let postId = outputJson.objects[i].id.toString(); 
    let newSlug = outputJson.objects[i].slug.replace("blog/", ""); 
    let urlToPut = "https://api.hubapi.com/content/api/v2/blog-posts?limit=1000&hapikey=" + process.env.HAPIKEY; 

    urlToPut = urlToPut.replace("blogPostId", postId); 

    let put_data = JSON.stringify({ 
     "slug": newSlug 
    }); 

    put_data.put(urlToPut); 
    } 
}); 
+0

嗨@詹姆斯Zich。如果這個或任何其他的回答已經解決了您的問題,請考慮點擊複選標記[接受它(https://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做,但是,我注意到在你的文章歷史中,你根本沒有給出任何答案,這不是它運作的方式。 – Nevertheless

回答

0

如果您需要從文件流數據請求,你應該創建從文件read streampipe它的目的地:

const dataStream = fs.createReadStream('outputV3.JSON'); 

const options = { 
    hostname: 'www.example.com', 
    port: 80, 
    path: '/destination', 
    method: 'PUT', 
    headers: { 
    'Content-Type': 'application/json', 
    } 
}; 

const req = http.request(options, (res) => { 
    // response processing... 
}); 

dataStream.pipe(req); 

如果你需要更先進的邏輯流你應考慮在可讀文件流和可寫請求流之間放置一個自定義的Transform流。

1

如果我想用請求的承諾我可以做類似下面

let options = { 
uri: 'https://api.hubapi.com/content/api/v2/blog-posts?limit=1000&hapikey=' + process.env.HAPIKEY, 
method: 'GET' 
transform: function (body, response) { 
    return for(var i=0; i<outputJson.objects.length; i++) { 
    var postId = outputJson.objects[i].id.toString(); 
    var newSlug = outputJson.objects[i].slug.replace("blog/",""); 
} 
}; 

rp(options) 
.then(function(removedSlug) { 
.pipe(request.put('https://api.hubapi.com/content/api/v2/blog- 
posts/blogPostId?hapikey=' + process.env.HAPIKEY)) 
});