【问题标题】:Prompting for a URL to use while making a request in Node.js在 Node.js 中发出请求时提示使用 URL
【发布时间】:2015-12-18 18:44:14
【问题描述】:

我想要做的是提示用户输入一个 url,我想用输入的 url 发出一个 http 请求。但是我不断收到一条错误消息 “TypeError:无法读取未定义的属性‘父’。”

当我将 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
});

TIA!

【问题讨论】:

    标签: javascript node.js request httprequest


    【解决方案1】:

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

    '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() 中使用request(answer, function...) 调用,但如果您将其与另一个函数包装在一起,您可以获得更好的可读性并在需要时在其他地方再次使用它

    【讨论】:

    • 谢谢!正如你所说,将它包装在另一个函数中效果很好。请问您为什么要制作 readline、request 和 rl const?
    • 只是一个语义上的东西——它们永远不会被修改,所以 const 效果最好。 var 也可以正常工作,但是您只需进行提升即可。 var 提升还不错,但是现在我们在 es6/2015 中有块范围,我们可以更清楚地知道我们想要做什么:)
    猜你喜欢
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2021-09-07
    • 2020-02-02
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2021-01-06
    相关资源
    最近更新 更多