Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ExpressJS:res.redirect()不起作用。如何在单页应用程序中重定向? 问题:_Javascript_Express_Vue.js - Fatal编程技术网

Javascript ExpressJS:res.redirect()不起作用。如何在单页应用程序中重定向? 问题:

Javascript ExpressJS:res.redirect()不起作用。如何在单页应用程序中重定向? 问题:,javascript,express,vue.js,Javascript,Express,Vue.js,我有一个静态单页应用程序,其中我按下提交输入,使用Axios将POST请求从Vue组件发送到Express服务器,我在其中处理POST并尝试重定向到另一个页面,但res.redirect(“/home”)和/或res.sendFile(path.join(u dirname,../dist/index.html”)不重定向 预期行为: 提交后,我想重定向到/home。 其他一切都很好 服务器文件: 我构建Vue CLI应用程序,以便获得dist文件夹。在dist文件夹中,我有一个包含整个应用程序

我有一个静态单页应用程序,其中我按下提交输入,使用Axios将POST请求从Vue组件发送到Express服务器,我在其中处理POST并尝试重定向到另一个页面,但
res.redirect(“/home”)
和/或
res.sendFile(path.join(u dirname,../dist/index.html”)不重定向

预期行为: 提交后,我想重定向到
/home
。 其他一切都很好

服务器文件: 我构建Vue CLI应用程序,以便获得
dist
文件夹。在
dist
文件夹中,我有一个包含整个应用程序的
index.html

发送POST请求的Vue组件:
我试着写尽可能少的代码。

在你的发帖路线中,你已经返回了一些东西

app.post("/dhcpIP", function (req, res) {
  // check if request body is empty
  if (req.body.constructor === Object && Object.keys(req.body).length === 0)
    return;
  // doing things that work
  res.redirect('/'); // this doesn't work
});

return语句结束函数执行。也就是说:您正在返回“一些有用的东西”,然后使用
res.redirect
方法,该方法被忽略,因为函数已经在post路径中返回了一个值

,您已经返回了一些东西

app.post("/dhcpIP", function (req, res) {
  // check if request body is empty
  if (req.body.constructor === Object && Object.keys(req.body).length === 0)
    return;
  // doing things that work
  res.redirect('/'); // this doesn't work
});

return语句结束函数执行。也就是说:您正在返回“一些有用的东西”,然后使用
res.redirect
方法,该方法被忽略,因为函数已经返回了一个值

我已经通过使用解决了问题。 显然,如果您正在执行AXIOS post,则无法从Express服务器重定向,必须使用AXIOS方法处理重定向。
我还没有找到关于这个主题的任何解释或文档。当我这样做时,我将更新此答案。

我是这样做的:

服务器文件: Vue组件:
我已经用计算机解决了这个问题。 显然,如果您正在执行AXIOS post,则无法从Express服务器重定向,必须使用AXIOS方法处理重定向。
我还没有找到关于这个主题的任何解释或文档。当我这样做时,我将更新此答案。

我是这样做的:

服务器文件: Vue组件: 请改用
router.push()
,因为您不是在重定向,而是在使用路由器

如果您希望通过重定向离开SPA,则可以根据服务器响应更改window.location,在这种情况下,从服务器发送301或302,并为其添加axios拦截器

请改用
router.push()
,因为您不是在重定向,而是在使用路由器

如果您希望通过重定向离开SPA,则可以根据服务器响应更改window.location,在这种情况下,从服务器发送301或302,并为其添加axios拦截器


我认为问题在于您的Vue组件没有处理重定向。原则上,如果它能与浏览器或用于测试API的程序一起工作,您可以尝试一下。我将对此进行研究。任何其他信息都会有所帮助。这是一个SPA,因此实际上只有一条路由
/home
,其他路由由javascript处理。您可以向他发送index.html文件
res.sendFile(path.join(\uu dirname,“../dist/index.html”)@Ifaruki它不起作用。它将html文件作为对象发送回客户端,但页面不会更改。甚至输入也没有刷新。我认为问题在于您的Vue组件没有处理重定向。原则上,如果它能与浏览器或用于测试API的程序一起工作,您可以尝试一下。我将对此进行研究。任何其他信息都会有所帮助。这是一个SPA,因此实际上只有一条路由
/home
,其他路由由javascript处理。您可以向他发送index.html文件
res.sendFile(path.join(\uu dirname,“../dist/index.html”)@Ifaruki它不起作用。它将html文件作为对象发送回客户端,但页面不会更改。甚至输入也不会刷新。不是真的,不是。if
语句检查我接收的内容是否为空,如果为空,则返回并结束函数执行。只要我在POST请求中发送一些东西,我在该
if-return
语句之后拥有的整个代码就可以正常工作
res.redirect()
res.sendFile()
都会将响应发送回Axios请求,因此函数不会在
if-return
处结束。不是真的。if
语句会检查我接收到的内容是否为空,如果为空,则返回并结束函数执行。只要我在POST请求中发送一些东西,我在该
if-return
语句之后拥有的整个代码就可以正常工作
res.redirect()
res.sendFile()
都会将响应发送回Axios请求,因此函数不会以
if-return
结束。请编辑您的答案并解释为什么您的解决方案比我的好?还包括一些示例代码?谢谢。另外,我不想离开SPA。我为什么要那样?你的回答对我来说很含糊。想进一步解释吗?我不知道如何使用
router.push()
。我试过
这个.router.push(currentUrl)但它返回一个错误:
错误:避免了到当前位置的冗余导航:“/dhcpIP”。
。你能用更多的细节来完成你的答案吗?你能编辑你的答案并解释为什么你的解决方案比我的好吗?还包括一些示例代码?谢谢。另外,我不想离开SPA。我为什么要那样?你的回答对我来说很含糊。想进一步解释吗?我不知道如何使用
router.push()
。我试过了
import Vue from "vue";
import VueRouter from "vue-router";
import Home from "../views/Home.vue";

Vue.use(VueRouter);

const routes = [
  {
    path: "/",
    redirect: "/home",
    component: Home,
  },
  {
    path: "/home",
    name: "Home",
    component: Home,
  },
  {
    path: "/dhcpIP",
    name: "DHCP",
    component: () => import(/* webpackChunkName: "dhcpIP" */ "../views/DHCP.vue")
  },
];

const router = new VueRouter({
  mode: "history",
  // base: process.env.BASE_URL,
  routes,
});

export default router;
app.post("/dhcpIP", function (req, res) {
  // check if request body is empty
  if (req.body.constructor === Object && Object.keys(req.body).length === 0)
    return;
  // doing things that work
  res.redirect('/'); // this doesn't work
});
app.post("/dhcpIP", function (req, res) {
  // check if request body is empty
  if (req.body.constructor === Object && Object.keys(req.body).length === 0)
    return;
  // doing things that work

  if(errors.length != 0) {
    res.sendStatus(500);
  } else
  res.sendStatus(200);
});
    sendData: function() {
      if (this.ssid === "" || this.password === "") return;
      let currentUrl = window.location.pathname;
      server
        .post(currentUrl, { ssid: this.ssid, password: this.password })
        .then(res => {
          if(res.status == 200) {
            alert("Settings have been saved.");
            window.location = currentUrl;
          } else {
            alert("Something went wrong. Please try again");
          }
        })
        .catch(err => {
          console.log(err);
        });
    }