【发布时间】:2016-04-18 05:34:00
【问题描述】:
我正在尝试将此 CURL 调用转换为 request.js
curl -i -X POST "https://api.soundcloud.com/tracks.json" \
-F 'oauth_token=***' \
-F 'track[asset_data]=@music.wav' \
-F 'track[title]=Track title' \
-F 'track[sharing]=public'
有趣的是文件附件('asset_data')位于 formData 对象的第二层。
这不起作用:
var formData = {
oauth_token: '***',
track: {
asset_data: fs.createReadStream('music.wav'),
title: 'Track title',
sharing: 'public'
}
}
request.post({url:'http://service.com/upload', formData: formData}...
我知道这是因为 the docs 和 this post 说我必须将 track 嵌入到 JSON.stringify(track) 中
但是当我这样做并执行 POST 时,它会返回 "buffer":[],"length":0,我觉得它没有等待文件流式传输,然后才对其进行字符串化。
所有代码都集中在一个地方:
function postToSoundcloud(){
var track = {'sharing': 'public',
'title': TRACK_NAME,
'asset_data': fs.createReadStream('music.wav')
}
var formData = {
oauth_token: '***',
track: JSON.stringify(track)
};
var req = request.post({url:'https://api.soundcloud.com/tracks.json', 'formData': formData}, function optionalCallback(err, httpResponse, body) {
if (err) {
return console.error('upload failed:', err);
}
console.log('Upload successful! Server responded with:', body);
});
}
如果有更好的方法而不是使用 request.js,我愿意接受。我可以看出 request.js 很受欢迎,但我对 node 还是很陌生。
非常感谢大家
【问题讨论】:
-
你希望你的 post 请求以同步方式?
-
@Sagar 是的,在这种情况下,事情是同步的
标签: javascript json node.js request requestjs