javascript - 节点 js:意外的令牌“。” 尝试在花括号中传递全局变量时
问题描述
我正在使用必须从网站获取页面的包。
该网站会为每个请求设置一个新的会话 cookie,因此为了保持登录状态,我需要使用 cookie jar。
下面是如何使用 got 文档中的 cookie jar 的示例:
const {promisify} = require('util');
const got = require('got');
const {CookieJar} = require('tough-cookie');
(async () => {
const cookieJar = new CookieJar();
const setCookie = promisify(cookieJar.setCookie.bind(cookieJar));
await setCookie('foo=bar', 'https://example.com');
await got('https://example.com', {cookieJar});
})();
然而,在我的情况下,因为 cookie 在每次请求后都会被重置,并且可以随时从脚本的许多不同区域发出请求,所以我将 cookie jar 定义为全局变量,如下所示global.cookieJar = new CookieJar();
:
但是,我发现自己无法将全局变量传递给got()
函数。Got 的文档仅显示通过将 cookie jargot()
放在大括号中来将其传递给函数。因此,我应该能够像这样传递变量:await got('https://example.com', {global.cookieJar})
. 但是,如果大括号中的变量包含.
(),则 javascript 会抛出一个SyntaxError: Unexpected token '.'
并且不允许执行代码。
如何global.cookieJar
在got()
不导致语法错误的情况下传递?
解决方案
语法:
const foo = 1;
const object = { foo };
是以下的简写:
const foo = 1;
const object = { foo: foo };
有两个问题:
{global.cookieJar}
- 标识符中不能有 a
.
(因此您的语法错误) - 您将对象传递给的函数正在寻找的属性名称是
cookieJar
,不是global.cookieJar
。
不要使用速记。
{cookieJar: global.cookieJar}
推荐阅读
- php - windows文件系统上不允许的编码和解码字符
- rabbitmq - RabbitMQ — 为什么错误的订阅者会收到发布的消息?
- php - 在 php 中:更改密码未在数据库中更新
- python - 如何使用 pytest 检查从函数返回的 False 值
- mysql - 是否有使用 LOAD DATA INFILE 导入包含多个工作表的 csv 文件
- c++ - Cmake 交叉编译错误(缺少 -lm -lc 和 crt0.o)
- c# - WebApi 异步与同步
- python - 在numpy中将部分减少累积到数组中
- javascript - 如何使用带有自定义数据配置的 amcharts 创建实心仪表图?
- c# - 将图像从 MVC 控制器传递到 WebAPI,以便它在 HttpContext.Current.Request.Files 中可用