res.end(result)不会在我的网页上显示结果

时间:2017-11-15 11:34:31

标签: javascript node.js express url-routing

致电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'但同样的问题,网页上没有显示任何内容

3 个答案:

答案 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中发送数据的信息,请参阅herehere以及here。您正在将节点的res / req与Express res / req混合。不要那样做。 Express包装Node对象并且工作略有不同,例如它会照顾你正确的标题。

您正在做的事情:使用writeHead()设置标题。然后,使用错误的参数类型.end()res.end() will only accept strings or Buffers作为数据(第一个错误)。当您更改为.send()时,该方法会负责设置正确的标题,但您已经手动完成了此操作,因此您需要将标题设置两次,而不应该这样做 boom (第二个错误)。

解决方案是删除它:

res.writeHead(200, {
    'Content-Type': 'text/html'
});

...然后使用res.send(result)发送您的数据。

作为旁注,我会喜欢知道你是如何运行你的应用程序而不是获取错误日志,因为当我尝试构建一个可验证的示例时,它们就到处都是。详细错误日志有时比创建它们的代码更有价值。这是“有时”的其中之一。