Nodejs-Express:在console.log和回调中获得不同的输出



我在Kovan上部署了一个智能合约,它包含一个getter函数:

function getOrderStatus(uint _orderId) public view returns(bool shipped, bool arrived, bool payed) {
return (orders[_orderId].shipped, orders[_orderId].arrived, orders[_orderId].payed); 
}

如果我通过web3调用该函数,我会在控制台上得到以下输出,这很好!:

Result {
'0': false,
'1': false,
'2': false,
shipped: false,
arrived: false,
payed: false }

但是,如果我试图通过callback function转发返回的对象以提供它,例如通过API,我会在浏览器上得到以下输出:

[object Object]

唯一的区别是代替console.log(returnValue)->callback(returnValue)位于以下代码末尾:

function getOrderStatus(_orderId, callback) {
contractABI.methods.getOrderStatus(_orderId).call()
.then(returnValue => callback(returnValue));
}

然后通过Express调用该函数

app.get('/api/getOrderStatus', function(req, res) {    
orderId = req.query.orderId;        
getOrderStatus(orderId, function(error, data) {
if (!error) {
res.send(data);
}
else 
{
res.send(error);    
}
});    
});

如果你的getOrderStatus()函数是这样的:

function getOrderStatus(_orderId, callback) {
contractABI.methods.getOrderStatus(_orderId).call()
.then(returnValue => callback(returnValue));
}

那么你的结果是returnValue,对吧?如果像上面描述的那样调用callback函数,那么第一个参数就是数据。

在您的路由中,第一个参数是error参数,所以我想应该是这样的:

app.get('/api/getOrderStatus', function(req, res) {    
orderId = req.query.orderId;        
getOrderStatus(orderId, function(data, error) {  // <--- changed order of parameters
if (!error) {
res.json(data);
} else {
res.send(error);    
}
});    
});

希望能有所帮助。。。

最新更新