我想从Node中的REST API中检索一些数据,以供用户单击链接时直接下载到json文件中的用户使用。
我使用Blop尝试了一些东西,但是在我的情况下它不起作用,我不明白为什么...
<div class='wrapper_align_vertical'>
<a class='shortCut' id='extract'>Extract</a>
</div>
在互联网上查看了此示例,并很好地处理了示例数据。
document.getElementById('extract').onclick = function(event){
var data = { a: 1, b: "hello" }
var json = JSON.stringify(data)
var blob = new Blob([json], {type: "octet/stream"})
var url = window.URL.createObjectURL(blob)
this.href = url
this.target = '_blank'
// target filename
this.download = 'data.json'
}
但就我而言,我正在调用API以在创建blop之前从数据库收集数据。
我正在用ajax请求调用API。
function getFromDB(){
return new Promise(function(resolve, reject){
$.ajax({
url: '/api/extract',
dataType: "json",
type: 'GET',
headers: {
"x-access-token" : getCookie('token')
},
success: function(data){
if(data.success == 'true'){
resolve(data)
} else{
reject('Promise getFromDB failed !')
}
}
})
})
}
编辑:万一Promise失败,我添加了错误验证功能,不幸的是,情况并非如此!此外,我在控制台中打印了数据,一切似乎都很好,它已经完成了……解析数据正在发送回正确的json对象。
路由从数据库获取数据。
router.get('/', function(req, res, next){
var query = 'SELECT ...'
connection.query(query, function(err, rows){
var result = []
if(!err){
for(label in rows){
result.push(rows[label].path)
}
res.json({
success: true,
data:{
quantity : rows.length,
image: result
}
})
}else{
res.json({
success: false,
message: 'Failure while extracting tags from database !'
})
}
})
})
但这绝对不起作用,也许我缺少了什么?
document.getElementById('extract').onclick = function(event){
getFromDB()
.then(function(data){
var json = JSON.stringify(data)
var blob = new Blob([json], {type: "octet/stream"})
var url = window.URL.createObjectURL(blob)
this.href = url
this.target = '_blank'
this.download = 'data.json'
}, function(err){
// Promise failed
console.log(err)
})
}
我看到了其他可能有助于调试的内容...将API与Postman一起使用时,我得到了标头200:
GET /api/extract 200 5.484 ms - 375
但是!通过ajax调用时,我得到代码304:
GET /api/extract 304 6.339 ms - -
如果您有任何建议或建议,我将不胜感激!