Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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 undefined不是有效的uri或选项对象。在expressjs中_Javascript_Node.js_Express_Webpagetest - Fatal编程技术网

Javascript undefined不是有效的uri或选项对象。在expressjs中

Javascript undefined不是有效的uri或选项对象。在expressjs中,javascript,node.js,express,webpagetest,Javascript,Node.js,Express,Webpagetest,我使用的是expressjs,在运行webapagetest之后,我将字符串格式的url存储在一个变量中,然后我在请求节点模块中使用该变量从该url获取数据,但我得到的未定义的url不是有效的uri或选项。下面是我的JavaScript代码 var webbagetest=require('webbagetest'); var wpt=newWebPagetTest(“私有WebPagetTest实例服务器的url”); wpt.runTest('https://google.com,函数(错

我使用的是expressjs,在运行webapagetest之后,我将字符串格式的url存储在一个变量中,然后我在请求节点模块中使用该变量从该url获取数据,但我得到的未定义的url不是有效的uri或选项。下面是我的JavaScript代码

var webbagetest=require('webbagetest');
var wpt=newWebPagetTest(“私有WebPagetTest实例服务器的url”);
wpt.runTest('https://google.com,函数(错误,数据){
console.log(err | | data);
console.log(data.data.summaryCSV);
sid=data.data.summaryCSV;
console.log(sid类型);
});
请求(sid、函数(错误、响应、正文){
console.log(body);
尝试以下操作:

var WebPageTest = require('webpagetest'); 
var wpt = new WebPageTest('server-url'); 
wpt.runTest('some url', function(err, data) {
    console.log(err || data); 
    console.log(data.data.summaryCSV); 
    console.log("GOING INTO REQUEST MODULE!!"); 
    request('data_url', function (error, response, body) { 
       if (error) { 
      console.log(error); 
      } 
      console.log(body); 
      var data = body;
    })
});

您将收到错误,因为
runTest
函数是一个异步操作,因此您不应该依赖于以下代码行中设置的值,因为您无法确定异步调用是否已完成。要实现您想要执行的操作,您可以:

  • 直接在回调函数内调用代码(如@Subburaj所示)
  • 在回调内部调用您自己的回调函数(在本例中,将请求包装在函数中,并在内部调用)
  • 使用像Bluebird这样的promise库,然后只需使用
    then
    函数调用您的请求即可

嗯,
sid
是未定义的…@meskobalazs实际上我忘了在这里显示它,我声明了sid是一个全局变量,只是因为它被声明了,这并不意味着它不是
未定义的
。记住,
runTest
是异步的。所以你想让我在这里声明它吗???可能重复我按照你的指示做了,但是关键是我的代码进入了一个无限循环,但在同一个程序中,每当我在请求中手动编写sid的位置上的url时,程序都运行良好。请建议一些东西我打印了sid,它给了我正确的结果,它的类型是字符串,关键是,当控制来请求时,整个程序都会得到into无限循环,我不知道到底发生了什么。它们是完整的代码var webgetest=require('webgetest');var wpt=newwebgetest('server-url');var data_url;wpt.runTest('some url',function(err,data){console.log(err | | data);data_url=data.data.summaryCSV;console.log(“进入请求模块!!”;REQUEST('data_url',function(error,response,body){if(error){console.log(error);}console.log(body);var data=body;我执行了代码,在终端它告诉我:进入请求模块!![错误:无效的URI“data_url”]未定义请告诉我现在该怎么做,我真的被我的项目困住了。WebGetTest是一个开源项目,主要由Google开发和支持,作为他们努力提高web速度的一部分。“some url”是我想测试性能的网站名,WebGetTest是我安装的节点模块从wpt.runTest测试提供的url,发回4个url,分别包含csv格式、json格式、xml格式和人类可读格式的结果,现在我想点击包含csv格式数据的url,解析这些数据并获取图表。