You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Angular项目中API POST请求报404 Not Found,但Postman调用正常的问题求助

Angular项目中API POST请求报404 Not Found,但Postman调用正常的问题求助

兄弟,别慌!刚入门编程就帮朋友搞网站部署,已经很厉害了,遇到这种问题太正常了,我当初刚折腾Angular部署到cPanel的时候也踩过好几个类似的坑。根据你说的情况——前端在cPanel的public_html/test文件夹里能正常运行,但POST请求就404,Postman调用又没问题——我给你列几个最该先排查的方向:

  • 先盯死浏览器的请求地址! 打开浏览器F12的Network标签,触发那个POST请求,看看实际发送的URL到底是什么。大概率是你Angular代码里的endpoint写得有问题:比如本地开发时用的是绝对路径(比如http://localhost:3000/api/addtest),部署到cPanel的test子目录后,要么没改成相对路径,要么绝对路径没适配线上域名,导致请求跑到了你的域名/test/https:...这种完全错误的地址,可不就404嘛!

  • 检查Angular子目录的.htaccess配置 因为你把Angular部署在test子文件夹里,默认的.htaccess规则可能不对,会把POST请求也重定向到index.html。你可以在test文件夹里创建(或者修改).htaccess文件,内容改成这样:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /test/
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /test/index.html [L]
</IfModule>

重点是RewriteBase /test/这一行,必须对应你的子目录名,不然路由和请求路径就会乱套。

  • 排查Angular的HTTP拦截器(如果有的话) 如果你在项目里加了HTTP拦截器,会不会是拦截器里硬编码了本地的API前缀?比如拦截器自动给所有请求加了/api或者本地域名的前缀,部署到线上后没改,导致请求路径错了。

  • 排除下cPanel的文件夹权限(虽然概率低) 既然Postman能正常调用后端,权限应该没啥大问题,但保险起见可以看看test文件夹和后端API对应的文件权限是不是设成了755(文件夹)和644(文件),避免因为权限导致请求被拦截。

你先按上面的步骤一个个查,尤其是第一步看Network里的实际请求URL,那个最能直接定位问题。如果排查完还是有问题,把你的endpoint代码和浏览器里的请求URL贴出来,我再帮你抠细节!

备注:内容来源于stack exchange,提问作者Matteo Lolli

火山引擎 最新活动