也许题目说的还不是很明白,我就说一下我的需求吧

正在写一个爬虫类的NodeJs 程序,

由于有有防爬机制,所有请求需要带上cookie,通过cookie的值计算是sign值,才能正常返回数据, 问题是cookie会过期,如果cookie过期,请求返回失败,但是同时会返回新的cookie,

我的代码逻辑是这样的

class spider {

constructor(){

this.cookie = Cookie.getCookie() //返回Cookie

async getData(data){

let url = this.makeUrl(data) //组装url

const response = await request.get(url).setCookie(this.cookie)

if(response.json.sucess){

return reponse.josn //返回正确的数据,直接返回

} else {

//如果cookie 过期,更新cookie并重新请求一次

this.refreshcookie(response)

return this.getData

refreshcookie(response){

cookie.Update(response) //更据返回更新cookie

this.cookie = cookie.getCookie

const s = new spider()

async test(page){

const data = s.getData({page: page})

console.log(data

test(1)

如果请求一次,代码还是很正常的,如果cookie 程序自动更新cookie,重新请求返回了数据,最多请求2次就可以返回数据,

但是如果我有多个页面要取,

[1,2,3,4,5,6,7,8......100].forEach((page)=>{

test(page)

如果cookie无效的话,代码会产生200次请求,因为cookie是在异步代码中更新,所以,前100次请求,全是无效请求

我希望的效果是,如果第1个异步中发现了,cookie无效,直接更新所有的异步代码更新this.cookie的值,有没有好的办法。

也许题目说的还不是很明白,我就说一下我的需求吧正在写一个爬虫类的NodeJs 程序,由于有有防爬机制,所有请求需要带上cookie,通过cookie的值计算是sign值,才能正常返回数据, 问题是cookie会过期,如果cookie过期,请求返回失败,但是同时会返回新的cookie,我的代码逻辑是这样的class spider {constructor(){this.cookie = Cookie...
如果你正在使用一系列node模块,或许是一个像Express.js一样的框架,突然需要使用几个全局 变量 。怎样在 nodejs 里创建全局 变量 呢?        对此最常见的建议是“不使用‘var’关键字声明一个 变量 ”或“给object对象添加一个 变量 ”或“给OBJECT对象添加一个 变量 ”。你会使用哪种方式呢?        首先,让我们分析下global对象。打开一个终端,启动一个node命令
global:表示Node所在的全局环境,类似于浏览器中的window对象。 process:指向Node内置的process模块,允许开发者与当前进程互动。 例如你在DOS或终端窗口直接输入node,就会进入NODE的命令行方式(REPL环境)。退出要退出的话,可以输入 process.exit(); console:指向Node内置的console模块,提供命令行环境中的标准输入、标准输出功 2、process:该对象表示Node所处的当前进程,允许开发者与该进程互动。 3、console:指向Node内置的console模块,提供命令行环境中的标准输入、标准输出功能。 二、全局函数: 1、定时器函数:共有4个,分别是setTimeout(), clearTim...
如果一个 NodeJS 进程正在运行,有办法修改程序中的 变量 值么?答案是:通过 V8 的 Debugger 接口可以!本文将详细介绍实现步骤。 启动一个 HTTP Server 用简单的 Hello World 做例子吧,不过略作修改。在 global 下放一个 变量 message, 然后打印出来: // message content will be modified ! global...
A. nodejs 的console有很多种类型:   console.log(1),console.error(2),console.dir(3),console.time(4),console.timeEnd(5),console.trace(6).console.asstert(7).   眼花了吧,哈哈哈,这里经过使用以后我觉得,似乎console.log,可以替代2,3。可能因为语义的缘...
1.实现的功能及原理 实现了将,用户表单的数据,与 html 相结合,将用户输入的数据,显示到 html 对应的位置。 原理:通过正则表达式,替换 html 中的模板数据 如用户名{name},可以通过拿到用户提交的name的值value,通过 replace(正则表达式,value)的方式替换掉原模板数据,并输出到客户端。 2.主要用到的方法和模块 2.1文件操作模块 va
`existsSync` 是 Node.js 中的一个文件系统模块的方法,用于检查指定路径的文件或目录是否存在。它返回一个布尔值,如果路径存在则为 true,否则为 false。你可以使用它来判断一个文件或目录是否存在,然后根据需要采取相应的操作。 以下是使用 `existsSync` 方法的示例 代码 : ```javascript const fs = require('fs'); const path = '/path/to/file.txt'; if (fs.existsSync(path)) { console.log('File or directory exists.'); } else { console.log('File or directory does not exist.'); 在上面的示例中,我们首先导入 `fs` 模块,然后定义一个路径 变量 `path`。通过调用 `existsSync` 方法并传入路径参数,我们可以检查路径是否存在。根据返回的布尔值,我们可以进行相应的操作,例如打印出相应的消息。 需要注意的是,`existsSync` 方法在 Node.js 10.0.0 版本中被废弃,并在 Node.js 14.14.0 版本中被移除。推荐使用 异步 的 `fs.stat` 方法来检查文件或目录的存在性。