我是JavaScript的新手,我很确定我错过了从HTML页面(由Web浏览器浏览)使用JS的一些基本知识。
我的目标是使用cheerio从a dynamic website中删除照片链接,并将它们显示在js gadget中(例如,使用lightslider),following this tutorial获得以下脚本并在bash终端中通过简单的nodejs scrapt.js运行它看起来相当成功:
var request = require('request');
var cheerio = require('cheerio');
request('https://outbox.eait.uq.edu.au/uqczhan2/Photos/', function (error, respo
if (!error && response.statusCode == 200) {
console.log(html);
}
});
但是现在我不能在普通的浏览器中运行这个脚本(通过按f12 -〉console),在第一个语法之后显示错误:
>var request = require('request');
VM85:1 Uncaught ReferenceError: require is not defined
at <anonymous>:1:15
我知道一些JavaScript模块在使用之前需要加载,例如d3.js。我需要运行:
<script src="https://d3js.org/d3.v4.min.js"></script>
要使用所有的d3函数。我应该如何实现同样的事情,让我在网络浏览器中使用cheerio?
4条答案
按热度按时间yb3bgrhw1#
你不能直接在浏览器中运行node.js代码,请查看browserify,这是一个允许你在浏览器中运行node.js代码的模块。
aurhwmvo2#
Cheerio使用的库需要
process
,即Node进程对象,而浏览器中没有。browserify
工作,但是。来源:试图让
cheerio
与Webpack一起工作的无尽头痛。0yycz8jy3#
这是一个xy问题。你可能会假设要在浏览器中解析HTML,你应该使用Cheerio,一个Node.js HTML解析器。问题是,如果没有像browserify这样的构建工具来模拟
require
并使之成为可能,你就不能在浏览器中运行Node.js代码。然而,在开始添加构建过程之前,有必要后退一步,并认识到浏览器已经有了一个不需要任何包的原生HTML解析器,以及jQuery,它是一个简单的
<script>
标记,不需要构建过程或解决方案。事实上,Cheerio的发明纯粹是为了将jQuery语法移植到没有DOM Node.js的环境中。因此,不必将jQuery移植到Node,然后以Rube Goldbergian的方式返回到浏览器,只需直接使用jQuery或原生DOM,这些都是在Cheerio之前的原始原生浏览器工具。
request
在浏览器中也不是必需的。它是另一个不适用于浏览器环境的Node包。如上所述,您可以使用jQuery或本地fetch
调用来发出HTTP请求。再退一步说:大多数服务器都设置了CORS策略,以禁止不同来源的浏览器客户端向其资源发出跨来源HTTP请求。您可能需要运行Node和Express的服务器来绕过此限制。在这种情况下,Cheerio可能再次派上用场,这样您就可以从后端的第三方站点的响应中提取相关数据,并将其准备为对前端的响应。
不需要编写和托管自己的服务器,就可以使用像cors-anywhere这样的代理来跨源访问资源。
另请参见Client on Node.js: Uncaught ReferenceError: require is not defined。
wfsdck304#
简短的回答是,使用与包含d3js库相同的方法。
require()
在requiredjs
中定义,要使用require函数加载请求cheerio,您需要首先导入requirejs
,方法与导入d3相同。requirejs siteNodejs是服务器端的javascript,当你试图在客户端的浏览器中运行它们时,你需要非常小心。就像创建休息端点是服务器端,这在浏览器中是做不到的。
正如上面的答案所建议的,您可以使用构建系统(如
webpack
等wll)或加载程序(如systemjs
)来加载脚本。