我正在嘗試進行 api 呼叫并將其傳遞給將其存盤到 mongodb 的函式。問題是當我嘗試處理錯誤而不是重定向到錯誤頁面時,整個站點都會崩潰。我所有的其他函式都可以作業,只是包含 api 呼叫的請求函式不起作用。
我沒有重定向,而是只在終端中收到錯誤訊息。
這是我的代碼:
index.js
router.post('/',async function(req,res){
var {title,date,loc,count, save,del,update,csv} = req.body;
var {username} = req.session;
console.log(req.body);
var url = `http://api.openweathermap.org/data/2.5/weather?q=${loc}&appid=${API_KEY}&units=metric`
if(save){
//weather api
request({ url: url, json: true }, async function (error, response) {
if(error){
throw new Error ('type error');
}
else{
console.log('Current weather: '
response.body.main.temp
' degrees celsius'
);
let w = JSON.stringify(response.body.main.temp);
console.log(w)
await db.addItem(username,title, loc, count, w, date);
}
});
res.redirect('/');
}
應用程式.js
app.use('/', indexRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
這是應用程式崩潰時我的終端的外觀: 終端錯誤訊息
uj5u.com熱心網友回復:
request如果呼叫的 else 陳述句中發生錯誤,您還沒有描述該怎么做。因此,如果發生錯誤,它將崩潰。
由于您async...await在回呼中使用插入到資料庫中,因此您可以通過將其包裝在一個try...catch塊中并將重定向移動到 catch 中來獲得所需的功能:
request({ url: url, json: true }, async function (error, response) {
if(error){
throw new Error ('type error');
} else {
try {
console.log('Current weather: '
response.body.main.temp
' degrees celsius'
);
let w = JSON.stringify(response.body.main.temp);
console.log(w)
await db.addItem(username,title, loc, count, w, date);
} catch (error) {
console.log(error);
res.redirect('/');
}
}
});
但是,這throw new Error('type error')仍然會導致應用程式在此處崩潰。如果您還想在這種情況下重定向,那么您也可以在其中添加 ares.redirect('/')而不是拋出,或者將整個request呼叫包裝在 atry...catch中,以便 catch 塊也將捕獲該拋出的型別錯誤:
try {
request({ url: url, json: true }, async function (error, response) {
if(error){
throw new Error ('type error');
}
else{
console.log('Current weather: '
response.body.main.temp
' degrees celsius'
);
let w = JSON.stringify(response.body.main.temp);
console.log(w)
await db.addItem(username,title, loc, count, w, date);
}
});
} catch (error) {
res.redirect('/')
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480665.html
標籤:javascript 节点.js api 错误处理 要求
