- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用 API 创建一个 iTunes 搜索应用程序,但在尝试获取数据以将结果组件放在一起时遇到困难。
在其他资源中,我引用了以下信息: iTunes Search API
请看下面我的代码:
后端 - Controller - index.js
// Requiring Express.
const express = require("express");
// Requiring fetch from Node Fetch.
const fetch = require("node-fetch");
exports.getController =
("/search",
(req, res) => {
fetch(
`https://itunes.apple.com/search?term=${req.query.name}&limit=30&media=${req.query.type}`
)
.then((res) => res.json())
.then((results) => {
res.send(results);
});
});
后端 - 路由 - index.js
// Requiring Express.
const express = require("express");
// Requiring Router from Express.
const router = express.Router();
// Requiring controllers from the controllers folder's index.js.
const { getController } = require("../controllers/index.js");
router.get("/search", getController);
// Exporting controllers to server.js.
module.exports = router;
后端 - server.js
// Requiring Express.
const express = require("express");
// Requiring Morgan.
const morgan = require("morgan");
// Requiring CORS.
const cors = require("cors");
// Initializing express with variable "app".
const app = express();
// Requiring the routes index.js file.
const routes = require("./routes/index.js");
// Requiring Helmet.
const helmet = require("helmet");
/**
* Enabling App usages.
*/
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(express.json());
app.use(morgan("start"));
app.use(cors());
app.use(helmet());
app.use("/", routes);
const path = require("path");
if (process.env.NODE_ENV === "production") {
app.use(express.static("frontend/build"));
app.get("*", (req, res) => {
res.sendFile(path.resolve(__dirname, "frontend", "build", "index.html"));
});
}
const PORT = process.env.PORT || 8080;
app.listen(PORT);
console.log(
"Navigate to http://localhost:8080/search. Server is listening on port",
PORT
);
app.use(function (err, req, res, next) {
console.log(err.stack);
res.status(500).send("Something broke!");
});
前端 - search.js
// Imported react libraries and hooks.
import React, { useState, useEffect } from "react";
import axios from "axios";
// Imported Link from React Router Dom.
import { Link } from "react-router-dom";
// Imported components from React Bootstrap.
import { Row, Dropdown, ButtonGroup, Button } from "react-bootstrap";
// Imported icons from FontAwesome.
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faSearch } from "@fortawesome/free-solid-svg-icons";
// Imported components.
import Results from "./results.js";
const Search = () => {
const [name, setName] = useState("");
const [type, setType] = useState("");
const [results, setResults] = useState([]);
const [favourites, setFavourites] = useState([]);
const addToFav = (fav) => {
setFavourites([...favourites, fav]);
};
useEffect(() => {
localStorage.setItem("Favourites", JSON.stringify(favourites));
}, [favourites]);
const submitSearch = (e) => {
e.preventDefault();
axios
.get(`/search/${name}/${type}`, {
method: "GET",
headers: {
"Content-Type": "application/json",
},
})
.then((res) => {
const queryAdded = res.data.results;
setResults(queryAdded ? queryAdded : []);
})
.catch((err) => {
console.log(err);
});
};
let nameEntry = "";
const nameSubmit = (e) => {
const entry = e.target.value;
nameEntry = entry;
setName(nameEntry);
};
const categories = [
{ name: "MUSIC", value: "music" },
{ name: "MUSIC VIDEO", value: "musicVideo" },
{ name: "APPS", value: "software" },
{ name: "EBOOK", value: "ebook" },
{ name: "AUDIO BOOK", value: "audiobook" },
{ name: "PODCAST", value: "podcast" },
{ name: "MOVIES", value: "movie" },
{ name: "TV SHOW", value: "tvShow" },
{ name: "SHORT FILM", value: "shortFilm" },
];
return (
<div id="searchcontainer">
<div id="searchcontent">
<div id="searchinput">
<input
type="text"
placeholder="Search..."
name="name"
onChange={nameSubmit}
/>
<Link to={`/search`}>
<button id="searchbutton" type="submit" onClick={submitSearch}>
<FontAwesomeIcon icon={faSearch} title="Search" />
</button>
</Link>
</div>
<Dropdown as={ButtonGroup}>
<Button variant="info" size="sm">
CATEGORIES
</Button>
<Dropdown.Toggle
split
variant="info"
id="dropdown-split-basic"
drop="bottom"
/>
<Dropdown.Menu>
{categories.map((category, i) => (
<Dropdown.Item
as="button"
key={i}
id="searchcategories"
value={category.value}
checked={type === category.value}
onChange={(e) => setType(e.currentTarget.value)}
>
{category.name}
</Dropdown.Item>
))}
</Dropdown.Menu>
</Dropdown>
</div>
<div className="search-page">
<div className="container-fluid">
<Row md={5}>
{results.length !== 0 ? (
results.map((content) => (
<Results addToFav={addToFav} content={content} />
))
) : (
<h1></h1>
)}
</Row>
</div>
</div>
</div>
);
};
// Exported search.js to landing.js.
export default Search;
不幸的是,我收到以下错误:
我已经尝试了一些东西,但似乎没有任何效果。事实上,我认为我的所有摆弄可能会使代码过于复杂。
如果有人愿意提供任何帮助,我将不胜感激。
最佳答案
有几个问题:
axios
.get(`http://localhost:8080/search/${name}/${type}`, { // add the address of NodeJS application
/search/${name}/${type}
,那么在后端,req.query
将不起作用.您应该使用 req.params
并相应地更改您的路线。阅读 express 文件here .或者,您需要将前端部分的 URL 更改为 /search/?name={name}&type=${type}
http://localhost:3000/search/korn
。缺少 1 个参数,这会给您的后端应用程序带来错误的 URL。https://itunes.apple.com/search?term=${req.query.name}&limit=30&media=${req.query.type}
可能会导致 https://itunes.apple.com/search?term=korn&limit=30&media=undefined
您需要一种机制来处理丢失的数据。关于node.js - React 和 Express iTunes Search API::错误:请求失败,状态代码为 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67865767/
作为桌面开发人员,这对我来说是新的。 如果我能弄清楚这是如何完成的,它可能与我正在做的一些研究有关,特别是如何将厚桌面应用程序迁移到 Web 实现。 我能找到更多面向形式和轻量级的图形,但重量级的 3
我发现我可以搜索这样的歌曲术语: https://itunes.apple.com/search?media=music&entity=musicTrack&attribute=songTerm&te
我最近发布了一个 iPhone 应用程序,但我没有看到任何方法可以像在 Google Play 中一样检查应用程序统计信息。 你能告诉我怎么做吗? 最佳答案 您可以从 iTunes Connect 开
我刚刚发布了一款 iPhone 应用程序并正在更新其支持网站。我使用 iTunes Link Maker 创建了如下所示的链接。有一次,它打开了 iTunes,其余时间都没有。我尝试关闭 iTunes
我们想编写一个 Windows/OS X 应用程序,将播客评级信息从 iPod 和 iTunes 发送回服务器。两个问题: 是否有关于评分数据如何存储在 iTunes 中的文档, 如果用户将 iTun
如何获取可用的 iTunes 播客的 RSS 提要 URL?我想要一个列出 iTunes 上所有播客的提要。这可能吗? 谢谢。 最佳答案 现在有几种选择: iTunes RSS Feed Genera
我已经在 Apple iTunes 上更新了新版本的 iOS 应用程序。今天早上获得批准后,我发布了版本。已经超过 5 小时了,我仍然无法在 iTunes 上看到更新版本。当我打开 URL 时它仍然显
我正在使用 iTunes Store web service search API 获取歌曲信息. 我遇到的唯一问题是艺术品的分辨率极低(只有 60x60px 或 100x100px 可用)。 art
打算使用iTunes Search API来获取与应用程序相关的信息-http://www.apple.com/itunes/affiliates/resources/documentation/it
我很喜欢使用 iTunes Store,但我很好奇它是基于什么开发的(PHP 和 MySQL、Something Custom?)。 最佳答案 WebObjects 。如今它随 XCode 一起提供,
这与这样的帖子有关:iTunes API: get 100x100 px icon of an App 但是,由于接受答案中描述的方法似乎在某些情况下却被打破了,但仍然是一致的,所以我要问是否有已知的
有没有办法以编程方式与 iTunes 交互以添加新的播放列表或智能 View ? 例如,假设我从网站下载了 10 个新的 mp3 文件,有没有办法以编程方式将这个 mp3 列表添加到名为“New Al
使用 iTunes Link Maker 时一个人会得到一个 http-Link,这非常好,因为它也适用于非 iOS 设备。 但是当我在网页上使用它时,重定向到应用程序的确切时间是什么时候? Safa
有没有办法从 3rd 方应用程序以编程方式将 mp3 添加到我的 iTunes 库? 最佳答案 iTunes 有一个文件夹,您可以在其中放置文件,以便自动将其添加到库中。 C:\Users\Your
我已经搜索了如何在文件系统更改时在 iOS5 中接收回调。我从 Apple 的网站上找到了以下示例,但它仅在删除/创建文件时通知给定的委托(delegate)。 DirectoryWatcher cl
在 Cocoa 应用程序中,我正在寻找一种从 iTunes 检索专辑插图的解决方案,而不需要 iTunes 本身在后台启动和运行。 通常也是唯一的解决方案,Scripting Bridge,以及固有的
嗨,我的应用程序有指向 iTunes 音乐专辑的链接 像这样 http://itunes.apple.com/us/album/better-than-a-hallelujah/id366013643
我有自己的 iTunes Connect 帐户和 Apple 开发者许可证。 现在我加入了现有的开发人员团队,并希望能够将他们的构建上传到 iTunes Connect。 我通过 developer.
到目前为止我已经尝试过了,但仍然很不走运,我的应用程序没有安装到某些设备上。 这是步骤。 添加了 3 台设备的 UDID(2 X iPhone 5、iPad 4)。 修改后的开发配置文件(使用 * A
我正在尝试从 iTunes 搜索 API 获取播客剧集列表。我可以调用 API 并根据搜索词取回所有播客专辑: https://itunes.apple.com/search?media=podcas
我是一名优秀的程序员,十分优秀!