Javascript axios不通过http代理中间件向服务器发送post请求
server.jsJavascript axios不通过http代理中间件向服务器发送post请求,javascript,axios,http-proxy-middleware,Javascript,Axios,Http Proxy Middleware,server.js import axios from 'axios'; axios .post('api/email', { id: 1 }) .then((res) => { return res.data; }) 我的服务器位于本地主机:8080。 我在nextJS中编写客户端,当url调用时,我使用http代理中间件包。也就是说,所有包含/api/的请求都将从localhost:3000重定向到localhost:8080。 axios不发送post请求,
import axios from 'axios';
axios
.post('api/email', { id: 1 })
.then((res) => {
return res.data;
})
我的服务器位于本地主机:8080。我在nextJS中编写客户端,当url调用时,我使用http代理中间件包。也就是说,所有包含/api/的请求都将从localhost:3000重定向到localhost:8080。 axios不发送post请求,get正常。
在开发人员模式浏览器中查看“网络”选项卡时,它会显示请求头本身,但不显示方法。“计时”选项卡显示“警告请求尚未完成”。
UPD:我刚刚尝试通过fetch发送,结果是一样的,但我也删除了内容类型:“application/json”,fetch对我有效。但这是为什么?我该如何解决
我能解决我的问题。在此处找到解决方案:,
问题是server.js
这是正确的代码
const express = require('express');
const next = require('next');
const { createProxyMiddleware } = require('http-proxy-middleware');
const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
const apiPaths = {
'/api': {
target: 'http://localhost:8080/',
pathRewrite: {
'^/api': '/api',
},
changeOrigin: true,
},
};
const isDevelopment = process.env.NODE_ENV !== 'production';
app
.prepare()
.then(() => {
const server = express();
server.use(express.json());
server.use(express.urlencoded({ extended: false }));
if (isDevelopment) {
console.log('ok');
server.use('/api', createProxyMiddleware(apiPaths['/api']));
}
server.all('*', (req, res) => {
return handle(req, res);
});
server.listen(port, (err) => {
if (err) throw err;
console.log('> Ready on http://localhost:' + port);
});
})
.catch((ex) => {
console.error(ex.stack);
process.exit(1);
});
您的请求不应该是发送到
/api/email
(带前导的/
)吗?
if (isDevelopment) {
console.log('ok');
server.use('/api', createProxyMiddleware(apiPaths['/api']));
}
server.use(express.json());
server.use(express.urlencoded({ extended: false }));