This is how my route file look like :
const express = require('express');
const asyncify = require('express-asyncify');
const router = asyncify(express.Router());
const rssController = require('../controllers/mycontroller');
router.route('/:url')
.get(myController.handle);
module.exports = router;
這作業正常,我得到了我的 json 結果。但我喜歡添加一些錯誤處理并回傳正確的 http 狀態代碼。
我以這種方式更改我的 route.js 檔案:
const express = require('express');
const asyncify = require('express-asyncify');
const router = asyncify(express.Router());
const rssController = require('../controllers/mycontroller');
/* router.route('/:url')
.get(rssController.parse); */
router.get('/:url', async (req, res) => {
console.log(req.params);
try {
const result = await myController.handle(req.params);
res.status(200).send(result);
} catch (err) {
res.status(500).json(err);
}
});
module.exports = router;
然后我在控制器中收到一條錯誤訊息:“無法讀取未定義的屬性‘發送’”
這是我的控制器的樣子:
const testService = require('../services/testservice');
async function handler(url) {
const result = await testService.HandleFile(url);
return result;
}
const handle = async function (req, res) {
try {
const result = await handler(req.url);
if (result === undefined) throw new Error('Invalid result!');
return res.send(result);
} catch (error) {
console.log(`An error had happened ${error.message})`);
return (error);
}
};
module.exports = {
handle,
};
錯誤發生在這一行:
return res.send(result);
uj5u.com熱心網友回復:
在你ontroller你捍衛手柄函式(req, res),但在路由器檔案傳遞req.params和資源的說法是未定義
我建議您return res.send(result);在控制器中洗掉并處理路由器檔案中的結果和錯誤
洗掉后的示例代碼return res.send(result);:
const rssController = require('../controllers/mycontroller');
router.get('/:url', async (req, res) => {
console.log(req.params);
try {
const result = await myController.handle(req);
res.status(200).send(result);
} catch (err) {
res.status(500).json(err);
}
});
module.exports = router;
const testService = require('../services/testservice');
async function handler(url) {
const result = await testService.HandleFile(url);
return result;
}
const handle = async function (req) {
try {
const result = await handler(req.url);
if (result === undefined) throw new Error('Invalid result!');
return result;
} catch (error) {
console.log(`An error had happened ${error.message})`);
throw error;
}
};
module.exports = {
handle,
};
uj5u.com熱心網友回復:
我在我的 index.route.js 檔案中添加了這些代碼來處理 404 和例外(500 錯誤代碼)
處理 404 頁:
router.use((req, res, next) => {
const error = new Error('Error 404! OOOPS, page cannot be found!');
next();
return res.status(404).send(error.message);
});
對于其他錯誤
router.use((error, req, res, next) => {
next();
return res.status(500).send(`500 Internal Server Error! An error occurred procession your request! - ${error.message}`);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/327513.html
標籤:节点.js
