Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS分配变量不起作用_Javascript_Node.js_Express - Fatal编程技术网

Javascript NodeJS分配变量不起作用

Javascript NodeJS分配变量不起作用,javascript,node.js,express,Javascript,Node.js,Express,我一定是遗漏了什么。我无法使变量正确重写。当我控制台记录数据时,有一个返回的json对象。我认为我没有创建数据对象并将其分配给变量。如果我在控制台上记录tcResponse,那么我就没有定义 router.get('/testcase/:id', function(req, res) { var tcResponse; var Client = require('node-rest-client').Client; var options_auth={ u

我一定是遗漏了什么。我无法使变量正确重写。当我控制台记录数据时,有一个返回的json对象。我认为我没有创建数据对象并将其分配给变量。如果我在控制台上记录tcResponse,那么我就没有定义

router.get('/testcase/:id', function(req, res) {
    var tcResponse;
    var Client = require('node-rest-client').Client;
    var options_auth={
        user:"username",
        password:"password"
    };

    client = new Client(options_auth);

    args ={
        data:{test:"hello"}, // data passed to REST method (only useful in POST, PUT or PATCH methods)
        path:{
            "baseUrl":"http://local.dev/flex/services/rest/latest",
            "id":req.params.id
        }, // path substitution var
        parameters:{arg1:"hello",arg2:"world"}, // query parameter substitution vars
        headers:{"test-header":"client-api"} // request headers
    };

    client.get("${baseUrl}/testcase/${id}", args, function(data, response){
        // parsed response body as js object
        console.log(data);
        tcResponse = data;
        // raw response
        //console.log(response);
    });

    res.render('testcase', { 
        title: 'Zephyr Report - Test Case',
        testCaseId: req.params.id,
        tcResponseJson: tcResponse
    });
});
我相信我遗漏了什么,但不确定是什么。谢谢

console.log(data);
tcResponse = data
// raw response
//console.log(response);
问题是您需要记录响应,而响应实际上没有定义。尝试记录tcResponse

console.log(tcResponse);

猜测一下,您正在尝试调用RESTAPI,然后返回结果数据

在这种情况下,问题是在调用
render
之前,您没有等待异步
get
回调。您需要将使用异步响应的代码移动到异步函数的回调中

client.get("${baseUrl}/testcase/${id}", args, function(data, response) {
    res.render('testcase', { 
        title: 'Zephyr Report - Test Case',
        testCaseId: req.params.id,
        tcResponseJson: data
    });
});

您试图在哪里记录
tcResponse
?这个代码应该做什么?它实际上做什么?这是引入第三方RESTAPI。我只想将return json对象推送到视图中。我认为问题在于我在一个函数(client.get)中设置了tcReposonse=data,该函数不返回任何内容。是的,请参阅我的答案进行解释。我正在获取数据。我只是试着把它放在一个变量中,我可以在以后发送到视图,而不是在以后发送到视图。在收到数据之前,您向视图发送了
undefined
,因为数据的接收是一个异步过程。好的,在我的jade模板pre#{tcResponseJson}中,网页显示的是[object object]。所以我猜这就是我的json对象是的,如果你把一个普通对象转换成一个字符串,你就会得到它。如果你想要一个JSON字符串,你需要
JSON.stringify(data)
。我不希望它是一个字符串,我希望它是一个JSON对象,这样我就可以从中获取数据来在视图中构建我的表