netease-youdao / hex

heX
Other
1.52k stars 300 forks source link

node js request fail #67

Closed gogoge closed 8 years ago

gogoge commented 10 years ago

我是node js新手,想用hex練習抓取網頁 但目前遇到require request的時候會失敗的問題 請問有人能給點提示嗎 謝謝

下面是我在index.html會require的一個js 代碼如下

//第一個alert會正常執行
alert( "1" );
//接著require
var request = require("request");
//var cheerio = require("cheerio");
//第二個alert 及以下所有的程式都沒有執行 <<<<<<<<<<<<<<<<<
alert("2");
request("https://tw.yahoo.com/", function (error, response, body) {
  if (!error && response.statusCode == 200) {
    $('div#output').append() = "???";
  }
  else
  {
     $('div#output').append() = "xxx";
  }
});
gogoge commented 10 years ago

我從request的github page下載了request.js 發現有很多模組是我沒有的,請問是要一一手動全部安裝到相對位置嗎?

var optional = require('./lib/optional')
  , http = require('http')
  , https = optional('https')
  , tls = optional('tls')
  , url = require('url')
  , util = require('util')
  , stream = require('stream')
  , qs = require('qs')
  , querystring = require('querystring')
  , crypto = require('crypto')

  , oauth = optional('oauth-sign')
  , hawk = optional('hawk')
  , aws = optional('aws-sign2')
  , httpSignature = optional('http-signature')
  , uuid = require('node-uuid')
  , mime = require('mime-types')
  , tunnel = optional('tunnel-agent')
  , _safeStringify = require('json-stringify-safe')

  , ForeverAgent = require('forever-agent')
  , FormData = optional('form-data')

  , cookies = require('./lib/cookies')
  , globalCookieJar = cookies.jar()

  , copy = require('./lib/copy')
  , debug = require('./lib/debug')
  , getSafe = require('./lib/getSafe')
  , net = require('net')
  ;
bartonding commented 10 years ago

建议你先看看 nodejs 和 npm 文档先

gogoge commented 10 years ago

謝謝提示! 剛剛安裝之後已經能用request和cheerio抓資料了,

另外遇到一個問題, 下面的程式,在nodejs的console.log中可以正常執行 但在hex中卻不能正常執行, 想請教一下應該朝什麼方向去找資料?

var request = require('request');
var cheerio = require("cheerio");

request(
        {
            uri: "http://example.coml",         
        }, 
        function(error, response, html_code) 
        {       
            //在此處加alert("test"); hex並不會執行到,原因不瞭解
            if (!error && response.statusCode == 200) {
                var $ = cheerio.load(html_code);
                $('tbody>tr>td').each(function(i, element){
                    var a = $(this).prev();
//>>>console.log可正常執行
                    console.log(a.text());
//>>>若換成$('div#output').text("test");或是alert("test"); 卻都不會有任何反應
                });
            }
        }
);
bartonding commented 10 years ago

猜测在hex中,你的 require('request') 路径不对,改成require('./request')试试。另外,你可以打开调试面板(http://localhost:65432)看下报错的提示信息.

官方,关于manifest清单说明,还有其它doc,你可以过一遍 http://hex.youdao.com/zh-cn/tutorial/manifest.html