我正在使用node js请求模块将发布请求发送到网站。查看网站请求后,它使用“表单数据”作为有效内容。该页面的内容类型为“ application / x-www-form-urlencoded”。我的脚本是通过在电子应用程序中单击按钮来运行的。我的代码示例如下:
let options2 = {
method: "POST",
uri: site_url,//predefined
followAllRedirects: true,
headers: {
'Origin': checkout_host,//predefined
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.8',
'Referer': referer//predefined
'User-Agent': UA//predefined
},
formData: {
information that site is requesting
}
request(options2, (err, resp, body) => }
*I end up repeating the code for different information here*
}
运行代码时,这是我遇到的错误,它立即停止:
TypeError: self._form.on is not a function
答案 0 :(得分:2)
似乎发生这种情况的原因是,在处理错误时,请求模块在.on
对象上使用了FormData
方法。但是,这不是浏览器FormData
,而是从另一个依赖项中拉出来的。
Node可以很好地识别所有内容,但是浏览器存在一些麻烦。我假设这是因为您正在将此代码用于Electron应用程序,所以可能是问题所在。
查看此内容是否有帮助:https://github.com/request/request/issues/1961#issuecomment-233956542
否则,如果这是在前端,则使用fetch()
可能是一个警告。
https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch
另一个骇人听闻的选择是进入request
模块(特别是request.js
)并搜索self._form.on
并注释掉该块。但是我完全不建议这样做,因为这只是一种不好的做法,不能真正解决问题,并且可能导致意想不到的副作用。