首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react snap和skipThirdPartyRequests

react snap和skipThirdPartyRequests
EN

Stack Overflow用户
提问于 2019-12-20 02:59:28
回答 1查看 497关注 0票数 1

我将skipThirdPartyRequests设置为true,但react-snap已阻止所有请求。我知道这是正常行为,但我有自己的API,不知道如何在预渲染执行时将API请求发送到react-snap使用的同一主机(localhost:45678)。因此,我在预渲染阶段向生产域发送了请求,但在启用skipThirdPartyRequests后,这些请求被阻止。我需要禁用谷歌分析和其他服务的skipThirdPartyRequests。

有没有办法在预渲染阶段启用skipThirdPartyRequests的情况下与自己的接口进行通信?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-21 23:55:16

我找到了解决方案。我们可以创建自己的express服务器,并使用{..., externalServer: true, port: /*port of your server*/}选项调用react-snap的run函数,这样react-snap就不会启动自己的服务器,而只是向localhost:{port}发送请求。在我们的express服务器中,我们可以使用代理中间件http-proxy-middleware将react-snap`s的请求代理到真正的后端。

我的片段代码:

代码语言:javascript
复制
const http = require('http');
const path = require('path');
const express = require('express');
const fallback = require("express-history-api-fallback");
const serveStatic = require("serve-static");
const proxy = require('http-proxy-middleware');

const {run} = require("react-snap");


let general = {
    "port": 45678,
    "externalServer": true,
    "skipThirdPartyRequests": true,
    "puppeteerArgs": [
        "--no-sandbox",
        "--disable-setuid-sandbox"
    ],
    source: "build",
    publicPath: '/'

};

const startServer = options => {
    const sourceDir = path.normalize(`${process.cwd()}/${options.source}`);
    const app = express()
        .use(proxy('/socket.io', { target: process.env.PRERENDERING_URI, changeOrigin: true, ws: true }))
        .use(options.publicPath, serveStatic(sourceDir))
        .use(fallback("200.html", { root: sourceDir }));

    const server = http.createServer(app);
    server.listen(options.port);
    return server;
};

let server = startServer(general);

Promise.resolve()
    .then(() => run({
        ...general,
        destination: "build/desktop",
        fixWebpackChunksIssue: false,
        userAgent: 'ReactSnap',
        "viewport": {
            "width": 1600,
            "height": 1200

        },
    }))
    .catch(console.error)
    .then(() => {
        server.close()
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59415507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档