致电res.end(result)
并不会在我的网页上显示结果,当我拨打console.log('result ' + result)
时,它会显示在控制台上。
这是我的nodejs代码:
const express = require('express')
const app = express()
var url = require('url');
var Web3 = require('web3');
app.get('/', function(req, res) {
res.writeHead(200, {
'Content-Type': 'text/html'
});
if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
} else {
web3 = new Web3(new Web3.providers.HttpProvider("http://54.00.00.00:3010"));
}
if (web3.isConnected()) {
var abi = JSON.parse('[{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getData","outputs":[{"name":"","type":"bytes32"},{"name":"","type":"uint256"},{"name":"","type":"bytes32"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"Achats","outputs":[{"name":"aName","type":"bytes32"},{"name":"aId","type":"uint256"},{"name":"aDate","type":"bytes32"},{"name":"aValue","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"},{"name":"name","type":"bytes32"},{"name":"iid","type":"uint256"},{"name":"date","type":"bytes32"},{"name":"value","type":"uint256"}],"name":"setData","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]');
TestContract = web3.eth.contract(abi);
contractInstance = TestContract.at('0xc08f46fff9fcf082a0d1cebbcc464ca141d2b7d7');
if (q.opt == 'get' && typeof q.index != "undefined") {
contractInstance.getData.call(parseInt(q.index), {
from: '0x3e10889Ef5066C1428ECaf8580aD4EFd50F8Cf7B'
}, function(error, result) {
console.log('error ' + error);
console.log('result ' + result);
res.end(result);
});
}
}
}
app.listen(3000, function() {
console.log('Yep... on 3000 !')
})
我一直在尝试" res.end(结果)"功能的内部和外部' getData'但同样的问题,网页上没有显示任何内容
答案 0 :(得分:0)
res.write(result);
res.end()
res是stream
因此您需要在res
然后end
度过愉快的一天!
答案 1 :(得分:0)
好吧,您只会在web3.isConnected()
和q.opt == 'get' && typeof q.index != "undefined"
时发回回复。可能是其中一个条件不成立。
答案 2 :(得分:0)
这是一个强硬坚果,但我想我明白了。
有关如何在Express中设置标头以及如何在Express中发送数据的信息,请参阅here和here以及here。您正在将节点的res
/ req
与Express res
/ req
混合。不要那样做。 Express包装Node对象并且工作略有不同,例如它会照顾你正确的标题。
您正在做的事情:使用writeHead()
设置标题。然后,使用错误的参数类型.end()
:res.end()
will only accept string
s or Buffer
s作为数据(第一个错误)。当您更改为.send()
时,该方法会负责设置正确的标题,但您已经手动完成了此操作,因此您需要将标题设置两次,而不应该这样做 boom (第二个错误)。
解决方案是删除它:
res.writeHead(200, {
'Content-Type': 'text/html'
});
...然后使用res.send(result)
发送您的数据。
作为旁注,我会喜欢知道你是如何运行你的应用程序而不是获取错误日志,因为当我尝试构建一个可验证的示例时,它们就到处都是。详细错误日志有时比创建它们的代码更有价值。这是“有时”的其中之一。