每天学习一点点,成功增加一大步

NodeJs笔记:拦截 WEB 服务抛出的异常错误

NodsJS zhanghui 426℃

在使用 node 搭建 WEB 服务器中常常会遇到在执行过程中突然来了个异常错误,整个服务都停止了,而且错误信息会被抛出来暴露在外面,在正式环境如果这么做很可能会造成敏感信息的泄露,并且很不友好,如何解决整个服务不会被强制停止,异常错误信息又不会被暴露在外面(只是记录在服务器端的某个日志文件中方便查阅)。

要想解决这个问题,于是呼在找到以下的方法暂时的来解决,这个方法不是很好,但能暂时解决以上的问题。请看代码

import * as express from 'express';
import * as bodyParser from 'body-parser';
import * as logger from 'morgan';
import * as fs from 'fs';
import * as path from 'path';
import {ErrorModel, SuccessModel} from "./common/dataModel";
import {dateTime} from "./common/func";

/**
 * 定义 logger 目录
 * @type {string}
 */
const loggerPath = path.join(__dirname, 'logger');
const loggerFile = path.join(loggerPath, 'access.log');
if (!fs.existsSync(loggerPath)) {
    fs.mkdirSync(loggerPath);
}

const port = 3000;
const app = express();
const urlencodedParser = bodyParser.urlencoded({extended: false});

app.use(bodyParser.json());
// 拦截 node 抛出的异常错误
app.use((err, req, res, next) => {
    // console.log(err);
    var data = "\n\n" + dateTime() + "\n" + err;
    if (!fs.existsSync(loggerFile)) {
        fs.writeFileSync(loggerFile, data, {encoding: 'utf8'});
    } else {
        fs.appendFileSync(loggerFile, data, {encoding: 'utf8'});
    }
    res.json(new ErrorModel('系统异常错误'));
})

app.post('/', urlencodedParser, async (req, res) => {
    console.log(req.body);
    res.json(new SuccessModel());
});

const server = app.listen(port, () => {
    const host = server.address().address;
    console.log(`server start, address: http://${host}:${port}`);
});

肯定还有更好的方法正在寻觅中……

转载请注明:隨習筆記 » NodeJs笔记:拦截 WEB 服务抛出的异常错误