【问题标题】:ExpressJS serve static files on post requestExpressJS 在发布请求时提供静态文件
【发布时间】:2021-03-16 22:06:52
【问题描述】:

我需要 Express 服务器来提供静态文件(网站)。它在我的代码中运行良好:

var express = require('express');
var app = express();
var path = require('path');
var p = path.join(__dirname, '../web/public');
app.use("/files", function (req, res) {
    return res.send("I will do something on server");
});
app.use(express.static(p));
app.use('/*',express.static(p));
let port = 80;
var server = app.listen(port);

但是当我有一个由该服务器提供的表单时,它会在提交后重定向,并且页面只显示类似

无法发布 /dashboard/

在提供静态文件的意义上,如何正确处理发布请求?我尝试在声明端口之前添加它:

app.post(express.static(p));
app.post('/*', express.static(p));

但它不起作用。

PS:我的整个页面都是从 index.html 提供的(我想要那个)。为了做到这一点,我在我的代码中有:

app.use(express.static(p));
app.use('/*',express.static(p));

如何将帖子请求“重定向”到 index.html?在这个文件中,我有整个应用程序逻辑(它是一个单页应用程序)。

PS2:我真的需要默认提交。解决这个问题对我来说不是一个解决方案(我想让用户保存他们的登录名和密码,并且不提交表单,谷歌浏览器不会向用户提供)。另一方面,我确实需要使用 POST,因为登录表单正在传输敏感数据...

有什么想法吗?

谢谢!

【问题讨论】:

    标签: javascript node.js forms express post


    【解决方案1】:

    没有名为 dashboard 的文件,因此express.static 没有可提供的服务。

    要处理该仪表板路线,您可以这样做:

    app.post("/dashboard", function (req, res) {
      return res.send("I will do something with this post");
    });
    

    如果您想将 404 流量重定向到 index.html,您可以在所有路由定义之后执行此操作:

    app.use("/", function (req, res) {
      return res.redirect("/index.html");
    });
    

    【讨论】:

    • 它有效,谢谢!在接受之前只有最后一个问题。当我用“/”调用 app.use 时,是否意味着它捕获了以 / 开头的所有内容?我对快速路径的理解是,它只在完全匹配的 url 上进行重定向(所以只在 127.0.0.1/ 上)。
    • 不客气,我很高兴它有帮助。 app.use 影响一切,但 app.all 更像你描述的那样工作。看看this的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2014-03-13
    • 1970-01-01
    相关资源
    最近更新 更多