vite+vue3+js,请求node接口一直404,代理也写了,!
首先,让我们确定问题的原因,然后提供解决方案。
在 vite.config.js
中,确保代理配置如下:
export default {
server: {
proxy: {
'/api': {
target: 'http://your-node-server-url',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
}
}
}
注意:/api
是你希望代理的前端路径,your-node-server-url
是你的 Node.js 服务器 URL。
确保你在 Axios 中请求的 URL 是正确的,并且与你的 Node.js 接口匹配。
axios.get('/api/your-endpoint')
.then(response => {
// handle response
})
.catch(error => {
console.error(error);
});
在 Node.js 应用中,确保你的路由设置正确,并且确实在监听指定的路径。例如:
app.get('/your-endpoint', (req, res) => {
// your code here
});
如果你的前端和后端在不同的域上,你需要在 Node.js 服务器端设置 CORS (Cross-Origin Resource Sharing)。你可以使用 cors
中间件来实现这个功能。首先安装 cors:
npm install cors --save
然后在你的 Node.js 应用中使用它:
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors()); // Enable CORS for all routes by default. You can also use app.use(cors({ ... })) to enable CORS for specific routes.
仔细检查你的其他配置和代码,确保没有其他可能导致 404 的问题。
查看浏览器控制台和网络日志,看是否有其他相关的错误或提示,这可能会给你提供更多线索。
确保你使用的是 Vite, Vue3, Axios 和 Node.js 的最新稳定版本。有时候,问题可能是由于库或框架的旧版本引起的,而更新到最新版本可能会解决这个问题。
你这个问题我也遇到过,似乎无论如何设置webpack的代理都会无法代理。通过看你报错404那个URL就证明你的代理失败了,它访问的是你前端项目的URL了,但是你的前端项目中并没有这个接口。
我当时搞了一下没搞好,所以我直接在nodejs中设置允许跨域了。可以参考
app.all("*",function(req,res,next){
if( req.headers.origin.toLowerCase() == "http://www.zhangpeiyue.com"
|| req.headers.origin.toLowerCase() =="http://127.0.0.1" ) {
//设置允许跨域的域名,*代表允许任意域名跨域
res.header("Access-Control-Allow-Origin", req.headers.origin);
} //允许的header类型
res.header("Access-Control-Allow-Headers", "content-type");
//跨域允许的请求方式
res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");
if (req.method.toLowerCase() == 'options')
res.send(200); //让options尝试请求快速结束
else
next();
})
原生不行就用插件把
那就别用原生的允许跨域,你是express还是koa?express的话有一个cors跨域插件,用法如下:
app.use(
cors({
origin: function (ctx) {
//允许多个域名跨域
const whiteList = [
"http://localhost:8080",
]; //可跨域白名单
let url = ctx.header.referer.substr(0, ctx.header.referer.length - 1);
if (whiteList.includes(url)) {
return url; //注意,这里域名末尾不能带/,否则不成功,所以在之前我把/通过substr干掉了
}
},
maxAge: 5, //指定本次预检请求的有效期,单位为秒。
credentials: true, //是否允许发送Cookie
allowMethods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"], //设置所允许的HTTP请求方法
allowHeaders: ["Content-Type", "Authorization", "Accept"], //设置服务器支持的所有头信息字段
exposeHeaders: ["WWW-Authenticate", "Server-Authorization"], //设置获取其他自定义字段
})
);
如果你是koa的话也有一个插件 koa-cors
5 回答4.8k 阅读✓ 已解决
3 回答3.2k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
5 回答2.5k 阅读
4 回答3.3k 阅读
3 回答1.8k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
应该是代理配置写错了