无法在Angular 4中捕获ExpressJs自定义错误消息

时间:2018-03-20 05:02:07

标签: angular angular5

我正在使用ExpressJs 4.16和Angular 4.我将ExpressJs的错误发送到我的Angular App。但我无法显示自定义消息。

在Express

server.js

app.use(function (err, req, res, next) {
  res.status(err.status || 500);
  // logger.log('error', err.message + " expected URL was " + req.url);
  res.status(err.status).send(err.message);
})

MY-controller.js

function create(data) {
    return new Promise((resolve, reject) => {
        Department.findOne({ title: data.title })
            .exec((err, doc) => {
                if (err) return reject(err);
                if (doc) {
                    return reject(new Error('This department is already exists. Please enter different department name.'))
                } else {
                    data.createdBy = (data.createdBy) ? data.createdBy : '5a0436b0f578fa081dad72c1'
                    const department = new Department(data)
                    resolve(department.save());
                }
            })
    })
}

在Angular

department.service.ts

create(data) {
        return this.http.post(BASE_URL + '/department/create', data)
            .map(response => response as any[])
            .catch((error: Response) => {
                console.log('error',error) //==> Here I want my ExpressJs message i.e, "This department is already exists. Please enter different department name.".
                return Observable.throw(error)
            });
    }

1 个答案:

答案 0 :(得分:0)

您正在覆盖res.status

app.use(function (err, req, res, next) {
  res.status(err.status || 500); // Set the status
  res.status(err.status).send(err.message); // Overwrite it here
});

而不是那样做:

app.use(function (err, req, res, next) {
  res.status(err.status || 500).send(err.message);
});