首页 > 解决方案 > HTML 组件动作在 express 中重新路由

问题描述

我正在使用节点 js 部署 Web 应用程序并表达到我的共享托管域,但是我找不到将表单操作和按钮链接重新路由到正确目的地的方法,因为它们是从主机中的子目录提供的。

我用自己的电脑编写了我的应用程序测试代码,因此使用 localhost 作为我服务器的 url,然后我在 express 中声明了路由,如/object/add, /object/edit/:id,/object/list等...

它们似乎都可以工作,但是我也将 Handlebars 用于视图,因此我有类似的组件

  <form action="/object/edit/{{id}}" method="POST">
       <div class="form-group">
           <button class="btn btn-success btn-block">Save</button>
       </div>
  </form>

在 localhost 它可以工作,但是我试图将它部署到子目录下的域mydomain.com/app/crud,当我这样做时,我的重定向指向 mydomain.com/object/add而不是mydomain.com/app/crud/object/add,因此我得到错误页面。

我已经尝试在路由下设置我的应用程序,但尽管这适用于快速路由,但它不会更改来自 HTML 组件的 URL。

我当前的 Express 对象看起来像这样

const app = express();
var router = express.Router();
router.use(require("./routes"));
router.use("/object", require("./routes/object"));
router.use("/personality", require("./routes/personality"));
app.use(host.baseUrl, router);

我的路由器就像

const express = require("express");
const router = express.Router();

const pool = require("../database");

router.get("/add", (req, res) => {
  res.render("object/add");
});

router.post("/add", async (req, res) => {
  const { name } = req.body;
  const object= {
    name
  };
await pool.query("INSERT INTO objectset ?", [object]);
  res.redirect("/object");
});

...

module.exports = router;

我也尝试过使用

function handleRedirect(req, res) {
  const targetUrl = targetBaseUrl + req.originalUrl;
  res.redirect(targetUrl);
}
app.get('*', handleRedirect);

但它弄乱了我所有的 CSS 请求和几乎所有其他路由。

有没有办法可以管理这些重定向?也许可以使用 htmlredirects 代替?

标签: node.jsexpressshared-hosting

解决方案


推荐阅读