【问题标题】:How to parse html in node.js using jquery 2.1.3?如何使用 jquery 2.1.3 解析 node.js 中的 html?
【发布时间】:2015-05-24 15:18:50
【问题描述】:

我正在尝试将 node.js 与 jquery 2.1.3 和 jsdom 4.0.4 一起使用来进行网页抓取。但是我在运行 jquery 模块时遇到了问题。这是代码

// Load the http module to create an http server.
var $ = require('jquery')(require("jsdom").jsdom().parentWindow); 
var http = require('http');
var request = require("request");


// Configure our HTTP server to respond with Hello World to all requests.
var server = http.createServer(function (req, res) {
    res.writeHead(200, {"Content-Type": "text/plain"});


    var uri = "http://www.forever21.com/shop/ca/en/men-tees-tanks";

    request({
        uri: uri,
    }, function(error, response, body) {
        if (error) {
            return console.error(error);
        }

        var f = $(body);

        res.write(body);

        res.end();
    });

});


// Listen on port 8000, IP defaults to 127.0.0.1
server.listen(8000);

// Put a friendly message on the terminal
console.log("Server running at http://127.0.0.1:8000/");

我得到的错误是:

C:\Users\ME\Desktop\Apps\Waerl\node_modules\jquery\dist\jquery.js:28
                                if ( !w.document ) {
                                       ^
TypeError: Cannot read property 'document' of undefined
    at module.exports (C:\Users\ME\Desktop\Apps\Waerl\node_modules\jquery\dist
\jquery.js:28:12)
    at Object.<anonymous> (C:\Users\ME\Desktop\Apps\Waerl\server.js:2:26)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

有谁知道如何解决这个问题?

谢谢

【问题讨论】:

    标签: jquery node.js jsdom


    【解决方案1】:

    jsdom 4.0.0 switched 从非标准的 parentWindow 到文档的标准 defaultView 属性。

    试试这个:

    // Load the http module to create an http server.
    var $ = require('jquery')(require("jsdom").jsdom().defaultView); 
    var http = require('http');
    var request = require("request");
    
    
    // Configure our HTTP server to respond with Hello World to all requests.
    var server = http.createServer(function (req, res) {
        res.writeHead(200, {"Content-Type": "text/plain"});
    
    
        var uri = "http://www.forever21.com/shop/ca/en/men-tees-tanks";
    
        request({
            uri: uri,
        }, function(error, response, body) {
            if (error) {
                return console.error(error);
            }
    
            var f = $(body);
    
            res.write(body);
    
            res.end();
        });
    
    });
    
    
    // Listen on port 8000, IP defaults to 127.0.0.1
    server.listen(8000);
    
    // Put a friendly message on the terminal
    console.log("Server running at http://127.0.0.1:8000/");
    

    【讨论】:

      猜你喜欢
      • 2011-11-14
      • 2014-02-02
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      相关资源
      最近更新 更多