如何下载使用Node.js在服务器端创建的数据?

时间:2019-03-06 15:00:17

标签: javascript node.js json web download

我想从Node中的REST API中检索一些数据,以供用户单击链接时直接下载到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以在创建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对象。

什么返回路线/ 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 - -

如果您有任何建议或建议,我将不胜感激!

0 个答案:

没有答案