Fork me on GitHub

Express全局的错误处理

一般错误处理

app.use((err, req, res, next) => {
    const statusCode = err.statusCode || 500;
    console.error(new Date().toLocaleString(), req.originalUrl, statusCode, err.message, err.stack);
    return res.status(statusCode).json({ 'message': err.message });
});

UnhandledPromiseRejectionWarning 异常处理

  • 安装组件

npm i express-async-errors

  • 修改index.js文件
const express = require('express')
require('express-async-errors');


//在app.listen(server.port之前添加上面的全局错误处理

以下代码是无法通过上面方式进行捕获的

原代码

const request = require('request');

exports.testerror = async (req, res) => {
    let testPromise = test(req, res, "https://baidu.com")
    let headers;
    headers = await testPromise;

    res.status(200).send(headers);
}

function test (req, res, url) {
    const options = {
        'method': 'GET',
        'url': url
    };
    return new Promise((resolve, reject) => {
        request(options, function (error, response) {
            if (error) {
                reject(error);
            } else {
                // 此处cookies为undefined
                let cookies = response.headers['FSDFSFSS'];
                let cookieHeaders = []
                // 这儿将报异常
                cookies.forEach(cookie => {
                    console.log("cookie: ", cookie);
                    cookieHeaders.push(cookie.split(';')[0])
                })

                resolve(cookieHeaders);
            }
        })
    })
}

无赖我只能将request的回调函数中的逻辑提至返回结果后,详细看下面代码

修改后代码


exports.testerror = async (req, res) => {
    let testPromise = test(req, res, "https://baidu.com")
    let headers;
    headers = await testPromise;
    // ***************被移动的代码**************************
    console.log("cookie: ", headers);
    let cookies = headers['FSDFSFSS'];
    let cookieHeader = []
    cookies.forEach(cookie => {
        console.log("cookie: ", cookie);
        cookieHeaders.push(cookie.split(';')[0])
    })
    // ***************被移动的代码**************************
    res.status(200).send(cookieHeader);
}

function test (req, res, url) {
    const options = {
        'method': 'GET',
        'url': url
    };
    return new Promise((resolve, reject) => {
        request(options, function (error, response) {
            if (error) {
                reject(error);
            } else {
                resolve(response.headers);
            }
        })
    })
}

这种方法虽不是最好,但解决了我的问题,不知名位是否有更好的解决方法

posted @ 2023-02-10 11:17  逍遥メ风  阅读(164)  评论(0编辑  收藏  举报