Я хочу получить некоторые данные из моего REST API в Node для пользователя, непосредственно загруженного в файл json, когда он щелкает ссылку.
Я попробовал кое-что, используя Blop, но в моем случае это не работает, я не понимаю, почему ...
HTML
<div class='wrapper_align_vertical'>
<a class='shortCut' id='extract'>Extract</a>
</div>
JS (образец, который работает)
Просматривал этот пример в интернете и хорошо работал с образцами данных.
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 для сбора данных из базы данных перед созданием блока.
Как я получаю данные
Я вызываю API с помощью запроса ajax.
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 !')
}
}
})
})
}
РЕДАКТИРОВАТЬ : Я добавил проверку ошибок на случай, если обещание не выполнено, но, к сожалению, это не так! Более того, я распечатал данные в консоли, и все, кажется, нормально, все завершено ... Устранение данных отправляет обратно нужный объект json.
Что вернуть по маршруту / api / extract
Маршрут получения данных из БД.
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 - -
Если у вас есть какие-либо советы или предложения, я буду признателен, спасибо!