Express and Cheerio/JSDOM

3

我想让Cheerio与Express一起使用。

我希望能够从服务器操作DOM,但我找到的只是网络爬虫..

有一些要求..

目前,我能够运行多个app.listen(port);语句,并使用多个服务器。

我试图将<script>alert("test);</script>添加到由Express发送的每个页面中。

我已创建了Express服务器:(假设Path是预定义变量)

var express = require('express');
var app = express();    
app.get('/', function (req, res) {
        app.use(app.static(Path));
        res.sendFile(Path + "/index.html");
    });
app.listen(Port);

你们能为我提供一个将此追加到页面的工作示例吗?有没有办法使其实时工作?

谢谢!


Cheerio肯定可以做到。你到目前为止尝试了什么,遇到了什么问题、错误等? - Dave Ward
问题在于我没有找到任何示例代码... 所以我不确定从哪里开始... - medemi68
添加了一个简单的例子。希望这能让你朝着正确的方向前进。 - Dave Ward
1个回答

1

这是一个没有错误处理的快速/简单示例:

var express = require('express');
var fs = require('fs');
var cheerio = require('cheerio');

var app = express();

app.get('/', function (req, res) {
    fs.readFile(Path + '/index.html', function(err, data) {               
        var $ = cheerio.load(data);

        $('body').append('<script>alert("test");</script>');

        res.send($.html());
    });
 });

app.listen(Port);

我在本地测试了一下,结果如预期。请确保在真正的实现中,在readFile回调函数中测试err并适当处理文件未找到或读取出错的情况。


我可以在顶部这样做吗:app.use('/', express.static(Path));? - medemi68
@medemi68:你可以使用静态模块,但我认为这不会自动运行处理静态请求的代码。如果你想要类似静态模块的东西,并包含注入代码,你可能需要编写自己的模块。此外,你可以在路由中使用通配符,如 /*.html,以使其适用于多个不同的 URL。有很多选择。 - Dave Ward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接