Как загрузить данные, созданные на стороне сервера, с Node.js? - PullRequest
0 голосов
/ 06 марта 2019

Я хочу получить некоторые данные из моего 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 - -

Если у вас есть какие-либо советы или предложения, я буду признателен, спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...