【问题标题】:Can't route XHR requests, while URL in browser is working无法路由 XHR 请求,而浏览器中的 URL 正在工作
【发布时间】:2018-12-09 10:00:58
【问题描述】:

我正在尝试使用 NoteJS 和 Express 在 TypeScript 中开发 REST API。

到目前为止,我已经设法让 API 在 localhost 上运行,如果我导航到 http://localhost:8080 一切正常。

特别是,我设置了路由http://localhost:8080/newwletter/subscribe,如果我使用浏览器导航到该页面,一个新的(假)订阅者会正确添加到数据库中(这意味着整个逻辑有效)。

但是,如果我从客户端 Web 应用程序发出 XHR 调用,则所有请求都由 rute 处理程序 '*' 处理。

这是当前代码:

import express = require('express');

const app = express();

const newsletterRoutes = express.Router();

newsletterRoutes.get('/subscribe', async (req, res) => {
  console.log('req', req);
  res.send(await new Subscribers().add());
});

app.use(function (req, res, next) {

  res.setHeader('Content-Type', 'application/json');
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');

  next();
});

app.use('/newsletter', newsletterRoutes);

app.use('*', (req, res) => {
  console.log(req.params);
  res.status(200).send('No valid url').end();
});

在客户端,我在 Angular 6 应用程序中发出请求,如下所示:

this.http.post(url, payload, {
  headers: new HttpHeaders().set('Content-Type', 'application/json')
})
.toPromise()
.then(response => console.log(response))
.catch(err => console.error('XHR Failed to connect to API', err));

【问题讨论】:

    标签: node.js angular express xmlhttprequest


    【解决方案1】:

    您的路由是为 GET 方法定义的,而您的客户端正在发出 POST 请求。

    执行以下操作之一:

    • 定义newsletterRoutes.post('/subscribe', ...)
    • 致电this.http.get(url, ...)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-03
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多