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中为无效路径发送自定义消息?
答案 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}