http-proxy-middleware 代理在 React js 和 Spring 引导项目中不起作用。 GET API is return 415 状态错误
http-proxy-middleware proxy is not working in React js and Spring Boot project. GET API is return 415 status error
我正在使用 http-proxy-middleware 中间件。 Content-Type: application/json 必须在 API 的 header 中加上 postman 执行。我在 React 中添加了 API 的 header 配置。
我认为错误是因为我没有正确发送 headers。其实我不知道。请帮助我。
谢谢
Spring开机
MovieController.java
@RestController
@RequestMapping("/movie")
public class MovieController {
@Autowired
private IMovieService movieService;
@GetMapping(value = "/fetchAllMovieList", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Movie>> fetchAllMovieList() {
return new ResponseEntity<>(movieService.fetchAllMovieList(), HttpStatus.OK);
}
}
反应
movieAction.js
import {API_BASE} from "../config/env";
import axios from 'axios';
const headers = {
'Content-Type': 'application/json;charset=UTF-8',
"Access-Control-Allow-Origin": "*",
"Accept": "application/json"
}
export function fetchMovies() {
return dispatch => {
dispatch({
type: "FETCH_MOVIES",
payload: axios.get(`${API_BASE}/movie/fetchAllMovieList`, {
headers: headers
}).then(response => console.log("Action/moviesAction.js -> response -> ", response))
})
}
}
setupProxy.js
import {API_BASE} from "./env";
const createProxyMiddleware = require("http-proxy-middleware");
module.exports = function (app) {
app.use(
createProxyMiddleware("/movie/fetchAllMovieList",{
target: `${API_BASE}`,
changeOrigin: true
})
);
};
env.js
export const API_BASE = "http://localhost:8080";
控制台中的结果
GET http://localhost:8080/movie/fetchAllMovieList 415
Uncaught (in promise) Error: Request failed with status code 415
at createError (createError.js:16)
at settle (settle.js:17)
at XMLHttpRequest.handleLoad (xhr.js:62)
网络结果
{
"timestamp": "2021-01-04T07:24:51.116+00:00",
"status": 415,
"error": "Unsupported Media Type",
"message": "",
"path": "/movie/fetchAllMovieList"
}
我仔细查看了代码,发现了很多错误。这是真的。
env.js
module.exports = {
API_BASE: "http://localhost:8000",
};
将此添加到 package.json
"proxy":"http://localhost:8000",
setupProxy.js
const { createProxyMiddleware } = require("http-proxy-middleware"); // import module
const { API_BASE } = require("./env");
module.exports = function (app) {
app.use(
"/movie/",
createProxyMiddleware({
target: API_BASE,
changeOrigin: true,
})
);
};
movieAction.js
import axios from "axios";
const headers = {
"Content-Type": "application/json;charset=UTF-8",
"Access-Control-Allow-Origin": "*",
Accept: "application/json",
};
export function fetchMovies() {
console.log("action run...");
return async (dispatch) => {
console.log("async action run..");
const response = await axios.get(`/movie/fetchAllMovieList`, {
headers: headers,
});
console.log(response.data);
dispatch({
type: "FETCH_MOVIES",
payload: response.data,
});
};
}
我和马赫迪解决了那个问题。我们错过了 data:{} 部分。我在 headers 下添加:headers, 并混合了他和我的代码。我要分享独奏。
moviesAction.js
import axios from 'axios';
const headers = {
'Content-Type': 'application/json;charset=UTF-8',
"Access-Control-Allow-Origin": "*",
Accept: "application/json"
}
export function fetchMovies() {
return async dispatch => {
const response = await axios.get(`/movie/fetchAllMovieList`, {
headers: headers,
data: {}
});
console.log("Action/moviesAction.js -> response -> ", response);
dispatch({
type: "FETCH_MOVIES",
payload: response.data,
});
}
}
setupProxy.js
import {API_BASE} from "./env";
const {createProxyMiddleware} = require("http-proxy-middleware");
module.exports = function (app) {
app.use("/movie/fetchAllMovieList",
createProxyMiddleware({
target: `${API_BASE}`,
changeOrigin: true
})
);
};
env.js
export const API_BASE = "http://localhost:8080";
在package.json
中添加代理
"name": "movie-frontend",
"version": "0.1.0",
"private": true,
**"proxy":"http://localhost:8080",**
"dependencies": {
我正在使用 http-proxy-middleware 中间件。 Content-Type: application/json 必须在 API 的 header 中加上 postman 执行。我在 React 中添加了 API 的 header 配置。
我认为错误是因为我没有正确发送 headers。其实我不知道。请帮助我。
谢谢
Spring开机
MovieController.java
@RestController
@RequestMapping("/movie")
public class MovieController {
@Autowired
private IMovieService movieService;
@GetMapping(value = "/fetchAllMovieList", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Movie>> fetchAllMovieList() {
return new ResponseEntity<>(movieService.fetchAllMovieList(), HttpStatus.OK);
}
}
反应
movieAction.js
import {API_BASE} from "../config/env";
import axios from 'axios';
const headers = {
'Content-Type': 'application/json;charset=UTF-8',
"Access-Control-Allow-Origin": "*",
"Accept": "application/json"
}
export function fetchMovies() {
return dispatch => {
dispatch({
type: "FETCH_MOVIES",
payload: axios.get(`${API_BASE}/movie/fetchAllMovieList`, {
headers: headers
}).then(response => console.log("Action/moviesAction.js -> response -> ", response))
})
}
}
setupProxy.js
import {API_BASE} from "./env";
const createProxyMiddleware = require("http-proxy-middleware");
module.exports = function (app) {
app.use(
createProxyMiddleware("/movie/fetchAllMovieList",{
target: `${API_BASE}`,
changeOrigin: true
})
);
};
env.js
export const API_BASE = "http://localhost:8080";
控制台中的结果
GET http://localhost:8080/movie/fetchAllMovieList 415
Uncaught (in promise) Error: Request failed with status code 415
at createError (createError.js:16)
at settle (settle.js:17)
at XMLHttpRequest.handleLoad (xhr.js:62)
网络结果
{
"timestamp": "2021-01-04T07:24:51.116+00:00",
"status": 415,
"error": "Unsupported Media Type",
"message": "",
"path": "/movie/fetchAllMovieList"
}
我仔细查看了代码,发现了很多错误。这是真的。
env.js
module.exports = {
API_BASE: "http://localhost:8000",
};
将此添加到 package.json
"proxy":"http://localhost:8000",
setupProxy.js
const { createProxyMiddleware } = require("http-proxy-middleware"); // import module
const { API_BASE } = require("./env");
module.exports = function (app) {
app.use(
"/movie/",
createProxyMiddleware({
target: API_BASE,
changeOrigin: true,
})
);
};
movieAction.js
import axios from "axios";
const headers = {
"Content-Type": "application/json;charset=UTF-8",
"Access-Control-Allow-Origin": "*",
Accept: "application/json",
};
export function fetchMovies() {
console.log("action run...");
return async (dispatch) => {
console.log("async action run..");
const response = await axios.get(`/movie/fetchAllMovieList`, {
headers: headers,
});
console.log(response.data);
dispatch({
type: "FETCH_MOVIES",
payload: response.data,
});
};
}
我和马赫迪解决了那个问题。我们错过了 data:{} 部分。我在 headers 下添加:headers, 并混合了他和我的代码。我要分享独奏。
moviesAction.js
import axios from 'axios';
const headers = {
'Content-Type': 'application/json;charset=UTF-8',
"Access-Control-Allow-Origin": "*",
Accept: "application/json"
}
export function fetchMovies() {
return async dispatch => {
const response = await axios.get(`/movie/fetchAllMovieList`, {
headers: headers,
data: {}
});
console.log("Action/moviesAction.js -> response -> ", response);
dispatch({
type: "FETCH_MOVIES",
payload: response.data,
});
}
}
setupProxy.js
import {API_BASE} from "./env";
const {createProxyMiddleware} = require("http-proxy-middleware");
module.exports = function (app) {
app.use("/movie/fetchAllMovieList",
createProxyMiddleware({
target: `${API_BASE}`,
changeOrigin: true
})
);
};
env.js
export const API_BASE = "http://localhost:8080";
在package.json
中添加代理 "name": "movie-frontend",
"version": "0.1.0",
"private": true,
**"proxy":"http://localhost:8080",**
"dependencies": {