express 与vs2的简单案例

博客对比了Express和jsdom两个接口库。Express可建立后端web服务,能接收get和post请求,还提到变量污染清理及沙箱机制。jsdom虽能一键补环境、降低被检测风险,但存在内存占用高、被检测概率大、对特殊API支持不好等缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接口库:express VS2 jsdom
相当于建立一个后端的web服务.
基本的例子:

const express = require('express') 
const app = express()
const port = 3000

处于一个监听状态:

app.listen(port, () => {
    console.log(`Example app listening on port ${port}`)
})

req,请求的内容. res: result
app.get app.psot 一个接收get请求,一个接收post请求

app.get('/', (req, res) => {
    console.log(req.query.a)
    res.send((Number(req.query.a) + 600).toString());
 API
})

变量污染:清除,快 稳

1.对污染的全局变量进行一键缓存清理,window除了内置的全部清除
不可迭代状态不能用这种方法清理.

function hauncun_clear() {
    _env = ['global', 'clearInterval', 'clearTimeout', 'setInterval', 'setTimeout', 'queueMicrotask', 'performance', 'clearImmediate', 'setImmediate',]
    for (i in global) {
        if (_env.indexOf(i) === -1) {
            delete global[i]
        }
    }
}

并发混论,不期待现象,无法预测结果.,
加锁,会降低性能.
2.沙箱
每一次执行js都有一个独立的环境.环境纯净,性能快.

const {VM} = require('vm2');

function name(x){
    const vm = new VM();
    result = vm.run(
        `
        if (!global.key) {
                global.key = 5000
            }
            global.key += Number(参数) + 50
        global.key
        `.replace('name', x))
    return result
}
app.get('/', (req, res) => {
    res.send(name(req.query.a).toString());
})

沙箱的调试

const {VMScript} = require('vm2');
const script = new VMScript('debugger;');
new VM().run(script);
})

jsdom:

const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM(`html代码`);
console.log(dom.window.document.querySelector("p").textContent); // "Hello world"

//设置参数:
const dom = new JSDOM(``, {
  url: "",
  referrer: "",
  contentType: "",
  includeNodeLocations: true,
  storageQuota: xxxxx
});

jsdom 缺点:

  1. 内存占用极高
  2. 被检测概率非常大
  3. 对某些特殊的API接口支持不好
    jsdom 优点
  4. 一键补环境,
  5. 降低被检测风险
  6. 可以配合canvas库实现 canvas的大部分功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值