node.js - 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 代替?
解决方案
推荐阅读
- python - sqlalchemy.exc.StatementError: (builtins.TypeError) 不是布尔值:无
- python - 使用python中的列表理解从字典列表中创建单个值列表
- mongodb - 在 mongodb 聚合管道中拆分像“3a”或“32ab”这样的字母数字字符串
- python-3.x - pytest:从命令行传递列表作为参数不起作用
- python - 返回具有相同索引但值不同的数据
- python - math.asin() 函数返回不正确的值
- python - 使用 Tensorflow 进行类似 Numpy 的索引和赋值
- python - 我无法根据 3 个条件为 df 行正确分配值(检查其他 3 个列中的值)
- python - QGraphicsView/QGraphicsScene 中的按钮无法正确绘制
- woocommerce - Woocommerce 手动增加 $post_id 以跳过一系列订单号