Javascript 在Node.js中发出请求时提示使用URL

Javascript 在Node.js中发出请求时提示使用URL,javascript,node.js,request,httprequest,Javascript,Node.js,Request,Httprequest,我想做的是提示用户输入一个url,然后根据输入的url,我想发出一个http请求。然而,我不断得到一个错误,说 “TypeError:无法读取未定义的属性'parent' 当我将url直接硬编码到请求中时,效果很好。只有当我尝试提示它时,我才得到一个错误 var answer = ''; var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question("En

我想做的是提示用户输入一个url,然后根据输入的url,我想发出一个http请求。然而,我不断得到一个错误,说 “TypeError:无法读取未定义的属性'parent'

当我将url直接硬编码到请求中时,效果很好。只有当我尝试提示它时,我才得到一个错误

var answer = '';
var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question("Enter a url you'd like to scrape: ", function(answer) {
  // TODO: Log the answer in a database
  console.log("This is the url you enetered:", answer);
  rl.close();
});

request(answer, function(error,response,html){
     //some code here
});

蒂亚

看起来您试图让事情异步执行,但它们是以同步方式工作的。这似乎更符合您想要做的事情:

'use strict';

const readline = require('readline');
const request = require('request');

let answer = '';

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question("Enter a url you'd like to scrape: ", function(answer) {
  // TODO: Log the answer in a database
  console.log("This is the url you enetered:", answer);
  rl.close();
  crawl(answer, function (error, response, html) {
    console.log(html);
    // or whatever else you want
  });
});

//use wrapper function
function crawl(answer, callback){
  request(answer, function (error, response, html) {
    callback(error, response, html);
  });
}

您也可以在
rl.question()
的内部使用
请求(应答,函数…
调用,但是如果您使用另一个函数来包装它,您可以获得更好的可读性,并在其他地方再次使用它,如果您愿意的话

看起来您试图让事情异步执行,但它们是以同步方式工作的。这似乎更符合您想要做的事情:

'use strict';

const readline = require('readline');
const request = require('request');

let answer = '';

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question("Enter a url you'd like to scrape: ", function(answer) {
  // TODO: Log the answer in a database
  console.log("This is the url you enetered:", answer);
  rl.close();
  crawl(answer, function (error, response, html) {
    console.log(html);
    // or whatever else you want
  });
});

//use wrapper function
function crawl(answer, callback){
  request(answer, function (error, response, html) {
    callback(error, response, html);
  });
}

您也可以在
rl.question()
的内部使用
请求(应答,函数…
调用,但是如果您使用另一个函数包装它,您可以获得更好的可读性,如果您愿意,可以在其他地方再次使用它

谢谢!正如您所说,将其包装到另一个函数中非常有效。我可以问一下为什么要使用readline、request和rl const吗?这只是一个语义问题——它们永远不会被修改,所以const工作得最好。var的工作原理也一样,但你只是有了即将发生的提升。var提升还不错,但现在我们在es6/2015中有了块范围,我们可以更清楚地了解我们想要做的事情:)谢谢!正如您所说,将其包装到另一个函数中非常有效。我可以问一下为什么要使用readline、request和rl const吗?这只是一个语义问题——它们永远不会被修改,所以const工作得最好。var的工作原理也一样,但你只是有了即将发生的提升。var提升还不错,但现在我们在es6/2015中有了块范围,我们可以更清楚地了解我们想要做的事情:)