При запуске моего запроса на получение через магазин iTunes Получите список лучших фильмов в iTunes из https://itunes.apple.com/us/rss/topmovies/limit=20/json
const fetch = require('node-fetch');
module.exports = function (app) {
//Get homepage
app.get('/', async (req, res) => {
const url = 'https://itunes.apple.com/us/rss/topmovies/limit=20/json';
const movie = req.params.id
const movieResult = await fetch(url);
const statusCodeIs200Or300 = movieResult.ok;
const movieError = movieResult.statusText;
const movieJson = await movieResult.json();
const movieToRender = movieJson.feed.entry;
console.info(movieResult.ok);
if (movieResult.status == 200) {
res.render('home', { movies: movieToRender});
}
throw new Error(movieResult.status);
});
// Get route for each specific the movies
app.get('/movie/:id', async (req, res) => {
const url = 'https://itunes.apple.com/us/rss/topmovies/limit=20/json';
const movie = req.params.id
const movieResult = await fetch(url)
const statusCodeIs200Or300 = movieResult.ok
const movieError = movieResult.statusText
const movieJson = await movieResult.json()
const movieToRender = movieJson.feed.entry[movie]
// if statetement
if (movieResult.status == 200) {
res.render('modal', { movie: movieToRender})
}
throw new Error(movieResult.status);
});
}
UnhandledPromiseRejectionWarning: отклонение необработанного обещания (идентификатор отказа: #) Ошибка: 200
пожалуйста, помогите мне с этой ошибкой





ошибка просто указывает, что вы не обрабатываете часть отклонения в обычном обещании есть часть .ловить(), как показано ниже
new Promise(function(resolve, reject) {
resolve('Success');
//reject('err)
})
.then(function(value) {
console.info("everything ok")
})
.catch(function(e) {
console.info(e); // "oh, no!"
})
но что случилось в async await, когда возникла ошибка? вы можете сделать одно из следующих
try {
await await fetch(url)
} catch (err) {
//handle error
}
или же может быть такое промежуточное ПО
const express = require('express');
const app = express();
app.get('/', safeHandler(handler));
app.listen(3000);
function safeHandler(handler) {
return function(req, res) {
handler(req, res).catch(error => res.status(500).send(error.message));
};
}
async function handler(req, res) {
await new Promise((resolve, reject) => reject(new Error('Hang!')));
res.send('Hello, World!');
}
более поздняя часть была занята этим источником безопасное решение для оператора
Ответ Фади объясняет, как правильно обрабатывать исключение в обещании, но в вашем случае вам также нужно вернуть что-то из ваших функций, иначе оно всегда будет выдавать ошибку:
app.get('/', async (req, res) => {
const url = 'https://itunes.apple.com/us/rss/topmovies/limit=20/json';
const movie = req.params.id
const movieResult = await fetch(url);
const statusCodeIs200Or300 = movieResult.ok;
const movieError = movieResult.statusText;
const movieJson = await movieResult.json();
const movieToRender = movieJson.feed.entry;
console.info(movieResult.ok);
if (movieResult.status == 200) {
// here you should return something to handle the case were all is good else the execution is going to continue and move onto to throw an exception.
return res.render('home', { movies: movieToRender});
// this should do the trick and in case your rendering function return an error it would be propagated as well.
}
throw new Error(movieResult.status);
});
в сочетании с правильной обработкой ошибок это даст что-то вроде:
app.get('/', async (req, res) => {
const url = 'https://itunes.apple.com/us/rss/topmovies/limit=20/json';
const movie = req.params.id
try {
const movieResult = await fetch(url);
const statusCodeIs200Or300 = movieResult.ok;
const movieError = movieResult.statusText;
const movieJson = await movieResult.json();
const movieToRender = movieJson.feed.entry;
console.info(movieResult.ok);
if (movieResult.status == 200) {
return res.render('home', { movies: movieToRender});
}
throw new Error(movieResult.status);
} catch (err) {
// handle the error correctly here: e.g. use an error template
res.status(500).send(error.message);
}
});
Он должен следовать той же схеме, что и я отредактировал :)
Однако вам следует изменить URL-адрес, на который он нацелен, я не знаю API itunes, но вы используете URL-адрес, который возвращает 20 лучших фильмов, а не фильм с определенным идентификатором.
похоже, что есть проблема с одним из обещаний