Vue.js与服务POST请求不兼容吗?

时间:2019-06-21 23:05:27

标签: javascript express vue.js single-page-application vue-router

我正在尝试对使用Vue CLI创建的Vue.js项目进行操作。 [问题]对这个问题并不重要,因此为了简洁起见,我将其省略。我已经注意到,当我使用此项目运行本地Web服务器时

$ npm run serve

GET请求可以正常工作;但是POST请求给我一个404-“无法发布”。我需要能够同时做这两个。

使用Express,只需在默认router.post(...)之外添加router.get(...),即可通过GET和POST为同一页面提供服务。但是,在Vue.js中,这似乎很困难。

我已经花了一些时间来玩Vue Router,但是仔细研究文档却没有找到配置选项来告诉它“这里是如何响应POST请求”-它似乎需要GET。

但是也许我正在尝试将一个方形钉敲成一个圆孔。 Vue.js适用于在浏览器中运行的应用程序,并且浏览器发送GET请求(目前我对表单提交不感兴趣...),其中POST请求通常更多地是Web应用程序/集成/后端有点。

你们的想法是-我明显缺少什么,还是应该以“简单”的方式进行操作并切换到Express?

更新:我的“问题”不是Vue.js,特别是-它是二进制的vue-cli-service,它一定侦听GET,而不侦听POST。 (来自Postman的GET成功;来自Postman的POST失败。)如果我为部署而构建,则webpack会将项目转换为HTML / JS / CSS,由另一个Web服务器提供服务,并且POST可以正常工作-只是在开发模式下,vue -cli-service正在本地服务我无法使用POST请求的应用程序。

是否存在使vue-cli-service响应POST请求的未记录方法?我已经搜索过文档,但没有发现任何东西。我不确定如何使另一个Web服务器为Vue.js项目提供服务,因为Webpack配置非常复杂。

2 个答案:

答案 0 :(得分:2)

Vue路由器未收到(GET)请求并没有响应,它只是在读取当前URL并插入相应的组件。简而言之,不,没有POST请求处理程序...我认为它甚至也不处理GET请求,只是读取看起来像GET请求的URL。

如果您尝试在应用程序内的页面之间进行POST,则需要Vuex。 如果您尝试从外部发布到您的应用程序,那么让实际的服务器侦听可以ping的请求会更容易(例如Express)。

可能是一种使用Axios从您的应用程序执行此操作的方法。它可以侦听POST请求的响应,因此,如果正在侦听,我看不到为什么无法接收。但是,我怀疑您必须从运行您的应用程序的计算机上监听端口,这将是一个主要的安全问题(如果客户端的浏览器/ OS /防病毒软件甚至允许您访问该端口)。

答案 1 :(得分:0)

距离我发布此问题已经快两个星期了,但是直到我一个星期都在为这个问题苦苦挣扎之前,我什至没有发布过该问题。经过大量的总部工作和更多的死胡同,我终于找到了解决方案,这对我的血压重新计算没有好处。在这里:

  1. 也许我最好的选择是看the vue-cli source code,我偶然发现它包含文档
  2. docs / config下的README.md文件对devserver选项的描述有点稀疏,但同时也提到支持webpack-dev-server的所有选项。哦。
  3. Webpack documentation显示一个devserver.before选项,该选项使您可以访问Express应用程序对象并向其中添加您自己的自定义中间件
  4. 这允许您拦截POST并将其重定向为GET
  5. Which this guy确实遇到了与我完全相同的问题。 (请注意,他使用的是devserver.setup,具有相同的功能,但不建议使用devserver.before。)在vue.config.js中,包括
devServer: {
    before: function(app) {
        app.post('/about.html', function(req, res) {
          res.redirect('/about.html');
        });
    },
}