请求失败,状态码 404 错误

Posted

技术标签:

【中文标题】请求失败,状态码 404 错误【英文标题】:Request failed with status code 404 error 【发布时间】:2020-09-18 13:22:43 【问题描述】:

我现在正在尝试构建一个 Spotify 网络应用程序。当用户从搜索结果中单击艺术家时,我想显示艺术家的专辑。当我尝试下面的代码时,我得到 Request failed with status code 404。

SingerBox.js

import React,  Component  from "react";
import Modal from "react-bootstrap/Modal";
import ImageNotFound from "../../ImageNotFound.jpg";
import "../../App.css";
import  Link  from "react-router-dom";

import Albums from "../Albums/Albums";
import axios from "axios";

const SingerBox = (props) => 
  const  images, name, id  = props;

  //check if the image array is empty since some artists' image data provided by the API call are empty
  const singer_img = images.length === 0 ? ImageNotFound : images[0].url;

  const handleClick = () => 
    axios
      .get(`http://localhost:4000/$id`, 
        params: 
          id: id,
        ,
      )
      .then((res) => 
        console.log(`Returned album data from the server: $res`);
        return <Albums albums=res.data />;
      )
      .catch((err) => console.log(err));
  ;

  return (
    <>
      <Link to=`/albums/$id`>
        <div className="box" onClick=() => handleClick()>
          <div>
            <img className="singer-img" src=singer_img  />
            name
          </div>
        </div>
      </Link>
    </>
  );
;

export default SingerBox;

相册.js

import React,  Component  from "react";
import  useParams  from "react-router-dom";
import axios from "axios";
import AlbumCard from "./AlbumCard";

const Albums = () => 
  const  id  = useParams();

  return (
    <div className="container" style= color: "white" >
      `$id's albums`
    </div>
  );
;

export default Albums;

服务器.js

const express = require("express");
const SpotifyWebApi = require("spotify-web-api-node");
const bodyParser = require("body-parser");
const cors = require("cors");
const app = express();
const port = 4000 || process.env.PORT;

require("dotenv").config();

app.use(express.json());
app.use(cors());
app.use(bodyParser.urlencoded( extended: true ));

// Create the api object with the credentials
var spotifyApi = new SpotifyWebApi(
  clientId: process.env.CLIENT_ID,
  clientSecret: process.env.CLIENT_SECRET,
);

// Retrieve an access token.
spotifyApi.clientCredentialsGrant().then(
  function (data) 
    console.log("The access token expires in " + data.body["expires_in"]);

    // Save the access token so that it's used in future calls
    spotifyApi.setAccessToken(data.body["access_token"]);
  ,
  function (err) 
    console.log("Something went wrong when retrieving an access token", err);
  
);

app.post("/search_result", (req, res) => 
  spotifyApi
    .searchArtists(req.body.keyword)
    .then(function (data) 
      let search_res = data.body.artists.items;
      res.json(search_res);
      res.end();
    )
    .catch((err) => 
      console.log(err);
      res.status(500).send(err);
    );
);

app.get("/albums/:id", (req, res) => 
  console.log(req.params.id);
  spotifyApi.getArtistAlbums(req.params.id).then(function (data) 
    res.json(data.body);
    res.end();
  );
);

app.listen(port, () => console.log(`It's running on port $port`));

我还想知道如何改进代码的结构,例如 axios 调用。它们看起来很乱,但我不知道从哪里开始修复它们。

【问题讨论】:

如果您从浏览器向 Spotify 发出 GET 请求,您是否能够获取响应? 【参考方案1】:

在你试图让 http://localhost:4000/$id 上的 SingerBox 组件中,你的 server.js 文件中没有这样的 API。这就是您遇到 404 错误的原因,这意味着 未找到

  const handleClick = () => 
  axios
  .get(`http://localhost:4000/$id`, 
    params: 
      id: id,
    ,
  )
  .then((res) => 
    console.log(`Returned album data from the server: $res`);
    return <Albums albums=res.data />;
  )
  .catch((err) => console.log(err));
 ;

添加你的 server.js

 app.get("/:id", (req, res) => 
   " your API logic"
  );

【讨论】:

以上是关于请求失败,状态码 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel / AJAX Like 按钮错误:请求失败,状态码 404

如何修复 axios Next js 中的“错误:请求失败,状态码为 404”

未捕获(承诺)错误:请求失败,状态码为404

HTTP状态码,200,304,404等

Youtube API未捕获(在承诺中)错误:请求失败,状态码为403

那些代表性的HTTP状态码,你还只知道404吗?快来看看吧