如何使webpack-dev-server接受POST请求

Kev*_*eal 2 post webpack webpack-dev-server

在我的项目中,我称:

$ webpack-dev-server --history-api-fallback
Run Code Online (Sandbox Code Playgroud)

并启动上可用的快递服务器(我假设)localhost:8080

效果很好,除了我想通过POST将表单提交到加载我的应用的iframe中;localhost:8080开发中和生产中的其他东西。

我不希望在开发中对POST数据做任何事情,但是在生产中,它必须是POST。

但是,当我尝试使用POST时, cannot find POST /

是否有配置选项或其他解决方案可让我使用webpack-dev-server?(我真的不想为此写我自己的服务器)。

cow*_*azy 7

您正在寻找的是devServer. 波纹管你可以看到我的配置。在setup(app)您可以添加“几乎”任何您想要的内容:

module.exports = {
    ...,
    devServer: {
        inline: true,

        port: 3000,

        publicPath: '/',

        setup(app){

            var bodyParser = require('body-parser');    
            app.use(bodyParser.json());

            app.get("/get/some-data", function(req, res){
                console.log(req);
                res.send("GET res sent from webpack dev server")
            })

            app.post("/post/some-data", bodyParser.json(), function(req, res){
                console.log(req.body);
                res.send("POST res sent from webpack dev server")
            })
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果你想更好地看一看, 我已经向 github推送了一个简约的例子


Kev*_*eal 6

@cowCrazy有一半的故事,但是没有显示如何在POST的情况下对GET做出相同的响应,这正是我所寻找的。

在Webpack配置中,您可以执行以下操作:

module.exports = {
    ...,
    devServer: {
        setup(app) {
            app.post('*', (req, res) => {
                res.redirect(req.originalUrl);
            });
        },
    }
}
Run Code Online (Sandbox Code Playgroud)

这将仅使用POST URL并使用相同的URL重定向,使其成为GET请求。

不会出现服务器错误,它将使用GET进行重定向。

  • 根据文档,“setup”已被弃用,取而代之的是“before”:https://webpack.js.org/configuration/dev-server/#devserversetup (3认同)