Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从本地托管服务器前端运行axios脚本_Javascript_Node.js_Axios_Frontend_Backend - Fatal编程技术网

Javascript 从本地托管服务器前端运行axios脚本

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

我有一个在本地主机上托管的前端。用户填写该前端上的所有数据后,单击一个按钮,然后启动一个名为startBot()的函数,该函数使用axios。如果我只是使用命令行而不是服务器运行startBot,那么脚本工作得很好,但是当我从服务器使用该功能时,axios使用我的浏览器详细信息来发送信息。这是我的密码: 这是当用户单击按钮运行startBot()时运行的函数:

以下是helperFunctions文件:

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);
        }
    }
}