如何呈现404竖琴作为库的页面

我使用竖琴作为一个Express中间件来呈现我的静态文件,我写作玉/咖啡/手写笔。 一切工作正常,除了当我浏览一个不存在的页面。 而不是通常的404页面,我迎接一个普通的“无法GET /(页面名称)”。 如果我用“竖琴服务器”而不是使用节点运行网站,自然它工作正常。

我觉得这个问题是我必须从服务器内部redirect404页面。 但是,如果我这样做,Express不承认玉的格式。 然后,我必须安装翡翠,并将其用作视图引擎。 另外,如果我使用手写笔,我也必须添加该渲染。 它击败了使用竖琴作为中间件的目的。

任何人都可以提出一个处理自定义404.jade文件的select,就像在竖琴的独立版本?

我的代码:

express = require "express" harp = require "harp" app = express() app.use express.static __dirname + "/public" .use harp.mount __dirname + "/public" #the following does not work .use (req,res) -> res.status(404).render __dirname + "/public/404.jade" .listen 3000 

看来问题出在这里: https : //github.com/sintaxi/harp/blob/master/lib/index.js#L89

 exports.mount = function(mountPoint, root){ if(!root){ root = mountPoint mountPoint = null }else{ var rx = new RegExp("^" + mountPoint) } var finder = middleware.regProjectFinder(root) return function(req, rsp, next){ if(rx){ if(!req.url.match(rx)) return next() var originalUrl = req.url req.url = req.url.replace(rx, "/") } finder(req, rsp, function(){ middleware.setup(req, rsp, function(){ middleware.static(req, rsp, function(){ middleware.poly(req, rsp, function(){ middleware.process(req, rsp, function(){ if(originalUrl) req.url = originalUrl next() // HERE }) }) }) }) }) } } 

显然,如果没有callback结束响应,竖琴只是恢复原来的url,然后调用,所以控制回到你的快递应用程序。

你可以分叉它,并添加一个选项来处理404的,也就是让竖琴知道后面不会有中间件。

这行看起来相关: https : //github.com/sintaxi/harp/blob/master/lib/middleware.js#L247