gpt4 book ai didi

node.js - 如何使用harp作为库渲染404页面

转载 作者:太空宇宙 更新时间:2023-11-04 00:58:34 26 4
gpt4 key购买 nike

我使用 harp 作为 Express 中间件来渲染我的静态文件,我将其编写为 jade/coffee/stylus。一切正常,除了当我浏览不存在的页面时。迎接我的不是通常的 404 页面,而是简单的“无法获取/(页面名称)”。如果我使用“harp server”而不是使用 Node 运行该网站,自然它工作得很好。

我认为问题在于我必须从服务器内部重定向 404 页面。但是,如果我这样做,Express 将无法识别 Jade 格式。然后我必须安装 jade 并将其用作 View 引擎。另外,如果我使用手写笔,我还必须添加该渲染。它违背了使用 harp 作为中间件的目的。

有人可以建议一个替代方案来处理自定义 404.jade 文件,就像在 harp 的独立版本中一样吗?

我的代码:

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
})
})
})
})
})
}
}

显然,如果没有回调结束响应,harp 只是恢复原始 url 并调用 next,因此控制权会返回到您的 Express 应用。

你可以fork它并添加一个选项来处理404,也就是说,让harp知道它之后不会有中间件。

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

关于node.js - 如何使用harp作为库渲染404页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28320272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com