如何在express.js中为无效路径发送自定义消息?

时间:2016-03-15 12:10:17

标签: node.js express

express.js中的以下方法

var express = require('express'), app = express();
app.get('/users', function (req, res) {
    //Some logic
}
可以使用URL

访问

http://<host-name>:<port>/users

如果无效路径如http://:/ invalid-path,我得到以下回复

无法获取/无效路径

有没有办法在express.js中为无效路径发送自定义消息?

4 个答案:

答案 0 :(得分:0)

我们可以通过app.all实现这一目标 例如

app.all('/*,function(req,res){
    var path = req.url;
    switch(path){
    case '/login':
      //logic
    default:
      res.send("Invalid");
    }
})

答案 1 :(得分:0)

是的,如果我没有误会,你说的是404找不到的页面。

使用express表达方式实际上非常简单。 Express按照定义的顺序匹配路由,这意味着,如果您尝试访问未定义的路由,它将尝试所有先前的路由,直到不再有路由。所以你需要的是一个定义的路由来捕获任何尚未匹配的请求。

如何?

简单,因为最后一条路线已定义(因此在此路线后代码中不再定义路线),您可以定义以下路线:

app.all(function(req, res, next) {
    // Your 404 logic here
}

答案 2 :(得分:0)

您可以创建一个中间错误,有点像这样..

/middleware/error.js

public class PerRequestLifetimeManager : LifetimeManager
{
    private readonly object key = new object();

    public override object GetValue()
    {
        if (HttpContext.Current != null &&
            HttpContext.Current.Items.Contains(key))
            return HttpContext.Current.Items[key];

        return null;
    }

    public override void SetValue(object newValue)
    {
        if (HttpContext.Current != null)
            HttpContext.Current.Items[key] = newValue;
    }

    public override void RemoveValue()
    {
        if (HttpContext.Current != null)
            HttpContext.Current.Items.Remove(key);
    }
}

not-found可以是具有未找到状态消息的特定页面。

答案 3 :(得分:0)

在您的路由之后,您需要捕获所有404(不由任何路由提供服务的URL),然后根据/路径制作一些中间件以进行错误处理:

// catch 404 and forward to error handler
app.use(function (req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

// error handlers
app.use('/api', function (err, req, res, next) {
    res.status(err.status || 500);
    res.json({
        message: err.message,
        error: err
    })
});

app.use(function (err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: err
    });
});

我创建了一个自定义错误处理程序,它显示了一个自定义错误页面(你可以修改/views/error.jade中的模板),而对于以/ api开头的请求(/ api / something等等),我返回一个json错误消息。

这是/views/error.jade:

扩展布局

block content
  h1= message
  h2= error.status
  pre #{error.stack}