Javascript 从本地托管服务器前端运行axios脚本
我有一个在本地主机上托管的前端。用户填写该前端上的所有数据后,单击一个按钮,然后启动一个名为startBot()的函数,该函数使用axios。如果我只是使用命令行而不是服务器运行startBot,那么脚本工作得很好,但是当我从服务器使用该功能时,axios使用我的浏览器详细信息来发送信息。这是我的密码: 这是当用户单击按钮运行startBot()时运行的函数: 以下是helperFunctions文件:Javascript 从本地托管服务器前端运行axios脚本,javascript,node.js,axios,frontend,backend,Javascript,Node.js,Axios,Frontend,Backend,我有一个在本地主机上托管的前端。用户填写该前端上的所有数据后,单击一个按钮,然后启动一个名为startBot()的函数,该函数使用axios。如果我只是使用命令行而不是服务器运行startBot,那么脚本工作得很好,但是当我从服务器使用该功能时,axios使用我的浏览器详细信息来发送信息。这是我的密码: 这是当用户单击按钮运行startBot()时运行的函数: 以下是helperFunctions文件: const axios = require("axios"); const cheerio
const axios = require("axios");
const cheerio = require("cheerio");
const qs = require('qs');
// constants
const RETRY_DELAY = 1000;
axios.defaults.withCredentials = true;
// creating a simple axios session so all cookies are stored throughout the checkout process
const session = axios.create({
baseURL: `https://www.supremenewyork.com`,
headers: {
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
'x-requested-with': 'XMLHttpRequest',
'Connection': 'keep-alive'
}
});
// timer function for delays
const timer = ms => new Promise( res => setTimeout(res, ms));
// function for simple get requests
const redirectTo = async (redirectLink, delay, successfullMessage, errorMessage) => {
while(true){
try{
const getRedirect = await session.get(redirectLink);
if(getRedirect.status === 200){
if(successfullMessage != null){
console.log(successfullMessage);
}
await timer(delay);
return getRedirect;
}
else {
console.log(errorMessage)
await timer(delay);
}
}
catch(err){
console.log(err);
await timer(delay);
}
}
}
现在,当我在没有服务器的终端上运行getSupremeProducts()时,它工作得很好,但是从前端运行它会把一切都搞砸(顺便说一句,我正在使用webpack,这就是为什么我可以从html运行节点模块脚本),并导致以下错误:
非常感谢您的帮助!我只需要弄清楚如何从前端运行这段代码,但让axios不要使用服务器详细信息来运行代码 出于安全原因,浏览器限制从脚本启动的跨源HTTP请求。这就是CORS,您必须更改远程服务器中的头,以允许来自您的域和端口的请求。如果你不能控制它,那么有几个选择*
- 在服务器允许的域中添加本地地址和端口
- 如果您只是在本地开发,无法控制服务器,则可以暂时禁用浏览器上的CORS李>
- 创建一个本地代理服务器,前端向代理服务器发出请求,代理服务器向远程服务器发出请求(我通常坚持使用这个,只需确保它有第一个点,即允许的主机名和端口等)
您可以在此处了解更多信息()出于安全原因,浏览器限制从脚本启动的跨源HTTP请求。这就是CORS,您必须更改远程服务器中的头,以允许来自您的域和端口的请求。如果你不能控制它,那么有几个选择*
- 在服务器允许的域中添加本地地址和端口
- 如果您只是在本地开发,无法控制服务器,则可以暂时禁用浏览器上的CORS李>
- 创建一个本地代理服务器,前端向代理服务器发出请求,代理服务器向远程服务器发出请求(我通常坚持使用这个,只需确保它有第一个点,即允许的主机名和端口等)
您可以在此处阅读更多信息()非常感谢您的回答。我正在使用serve static运行服务器,它只运行带有budle.js和css文件的html。-------------------------------------var connect=require('connect');var serveStatic=require('service-static');connect().use(serveStatic('../frontend')).listen(8000,()=>console.log('Server running on 8000…'));您的请求将从botapi.supremenewyork.com:8000发送到supremeneywork.com,它们是不同的。supremenewyork.com不允许botapi。supremenewyork.com:8000。。。我不确定你在跟踪。现在,如果您是客户端应用程序,则会向botapi.supremenewyork.com:8000发出请求,这是相同的主机名和端口。或者,正如我提到的,创建一个代理,将请求发送到任何你想要的地方,并从你的客户端接收请求……啊,好吧,现在我明白了。是否有链接指向如何执行上面的第三个选项?您可以在我的一个存储库()中找到一个工作示例;但是我们的想法是编写呼叫服务器端,它接受您的请求,计算并重定向它。如果我已经有proxys呢?我不能用这些来掩盖请求的来源吗?我只是在axios中使用代理属性进行了尝试,但没有成功。我来看看你的回购协议谢谢你的回答。我正在使用serve static运行服务器,它只运行带有budle.js和css文件的html。-------------------------------------var connect=require('connect');var serveStatic=require('service-static');connect().use(serveStatic('../frontend')).listen(8000,()=>console.log('Server running on 8000…'));您的请求将从botapi.supremenewyork.com:8000发送到supremeneywork.com,它们是不同的。supremenewyork.com不允许botapi。supremenewyork.com:8000。。。我不确定你在跟踪。现在,如果您是客户端应用程序,则会向botapi.supremenewyork.com:8000发出请求,这是相同的主机名和端口。或者,正如我提到的,创建一个代理,将请求发送到任何你想要的地方,并从你的客户端接收请求……啊,好吧,现在我明白了。是否有链接指向如何执行上面的第三个选项?您可以在我的一个存储库()中找到一个工作示例;但是我们的想法是编写呼叫服务器端,它接受您的请求,计算并重定向它。如果我已经有proxys呢?我不能用这些来掩盖请求的来源吗?我只是在axios中使用代理属性进行了尝试,但没有成功。我来看看你的回购协议
const axios = require("axios");
const cheerio = require("cheerio");
const qs = require('qs');
// constants
const RETRY_DELAY = 1000;
axios.defaults.withCredentials = true;
// creating a simple axios session so all cookies are stored throughout the checkout process
const session = axios.create({
baseURL: `https://www.supremenewyork.com`,
headers: {
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
'x-requested-with': 'XMLHttpRequest',
'Connection': 'keep-alive'
}
});
// timer function for delays
const timer = ms => new Promise( res => setTimeout(res, ms));
// function for simple get requests
const redirectTo = async (redirectLink, delay, successfullMessage, errorMessage) => {
while(true){
try{
const getRedirect = await session.get(redirectLink);
if(getRedirect.status === 200){
if(successfullMessage != null){
console.log(successfullMessage);
}
await timer(delay);
return getRedirect;
}
else {
console.log(errorMessage)
await timer(delay);
}
}
catch(err){
console.log(err);
await timer(delay);
}
}
}