Javascript 将值从promise对象(服务器端)获取到客户端index.html

Javascript 将值从promise对象(服务器端)获取到客户端index.html,javascript,node.js,express,promise,Javascript,Node.js,Express,Promise,我想知道如何将承诺对象转换为字符串。 我正在调用一个API,它返回一个XML对象,使用axios和transform进行模板化。我的应用程序使用Express作为应用程序框架。我在中有一个console.log。然后来自promise,它在命令行中返回控制台中的数据 但是,当我想在index.html中处理这些数据时,我会在控制台中得到一个promise对象。如何将promise对象中的“cover”部分数据输入index.html 服务器控制台日志记录: 控制台登录浏览器: 项目文件: /

我想知道如何将承诺对象转换为字符串。 我正在调用一个API,它返回一个XML对象,使用axios和transform进行模板化。我的应用程序使用Express作为应用程序框架。我在中有一个console.log。然后来自promise,它在命令行中返回控制台中的数据

但是,当我想在index.html中处理这些数据时,我会在控制台中得到一个promise对象。如何将promise对象中的“cover”部分数据输入index.html

服务器控制台日志记录:

控制台登录浏览器:

项目文件:

/routes/index.js

router.get('/metadata', function(req,res,next){
    var info = metadata.getMetadataOnix(params);
    console.log('info:'+info);
    res.json({ test : info });
});
index.html,其中包含一个ajax get,用于获取对文档的调用。就绪

 $.get("/metadata", function(data){
      // call to metadata
});
metadata-onix.js-我调用api的文件

const axios = require('axios');
const transform = require('camaro');

exports.getMetadataOnix = function (id) {
    const template = {
        uitgever: '/Product/PublishingDetail/Publisher/PublisherName/text()',
        cover: "./Product/CollateralDetail/SupportingResource[ResourceContentType=01]/ResourceVersion/ResourceLink/text()"
    }

    return axios({
        method: 'get',
        url: 'https://someapi/getMetadataOnix/'+id,
        transformResponse: [function (data) {
            "use strict";
            data = transform(data, template);
            return data;
        }],
    }).catch(function(err){
        // log errors
        console.log('error:'+err);
    }).then(function(resp){
        var cover = '';
        cover = resp.data.cover;
        console.log('Cover from book:'+JSON.stringify(resp.data.cover));
        return cover;
    });
}

这里有一些问题。与您的问题相关的主要问题是,您错误地使用了
getMetadataOnix
的结果。它返回一个承诺,因此您必须使用该承诺。一种方法是通过
然后

router.get('/metadata', function(req,res,next){
    var info = metadata.getMetadataOnix('9789024576791').then(function(info) {
        console.log('info:'+info);
        res.json({ test : info });
    });
});
不要担心这样一个事实,即在发送响应之前,
get
回调会返回;这不是问题,Express就是为此而设计的

另外,围绕错误处理的两个问题:

首先,您要将拒绝转换为具有/
未定义
的解决方案,如下所示:

exports.getMetadataOnix = function (id) {
    // ...

    return axios({
        // ...
    }).catch(function(err){           // <===
        // log errors                 // <===
        console.log('error:'+err);    // <===
    }).then(function(resp){
        var cover = '';
        cover = resp.data.cover;
        console.log('Cover from book:'+JSON.stringify(resp.data.cover));
        return cover;
    });
}


谢谢你的快速回复,我会实施这个。我会让你知道它是否有效。非常感谢!你是救命恩人:)
exports.getMetadataOnix = function (id) {
    const template = {
        uitgever: '/Product/PublishingDetail/Publisher/PublisherName/text()',
        cover: "./Product/CollateralDetail/SupportingResource[ResourceContentType=01]/ResourceVersion/ResourceLink/text()"
    }

    return axios({
        method: 'get',
        url: 'https://someapi/getMetadataOnix/'+id,
        transformResponse: [function (data) {
            "use strict";
            data = transform(data, template);
            return data;
        }],
    // No .catch here
    }).then(function(resp){
        var cover = '';
        cover = resp.data.cover;
        console.log('Cover from book:'+JSON.stringify(resp.data.cover));
        return cover;
    });
}
router.get('/metadata', function(req,res,next){
    var info = metadata.getMetadataOnix(params)
        .then(function(info) {
            console.log('info:'+info);
            res.json({ test : info });
        })
        .catch(function(err) {
            // Log error, etc.
            // Use `res.send` or `res.json` or similar to send error reply
        });
});