首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以harp作为库来呈现404页

如何以harp作为库来呈现404页
EN

Stack Overflow用户
提问于 2015-02-04 11:29:33
回答 1查看 173关注 0票数 1

我正在使用harp作为一个Express中间件来呈现我的静态文件,我把这些文件写成了翡翠/咖啡/手写笔。一切正常,除非我浏览一个不存在的页面。与通常的404页不同,我的回答是“无法获得/(页面名)”。如果我使用"harp server“来运行站点,而不是使用节点,那么它当然可以正常工作。

我想问题是我必须从服务器内部重定向404页面。然而,如果我这样做,速递不承认玉器的格式。然后,我必须安装玉石,并使用它作为视图引擎。另外,如果我使用手写笔,我也必须添加那个渲染。它违背了使用harp作为中间件的目的。

有谁能建议一种处理定制404.翡翠文件的替代方案,就像竖琴的独立版本?

我的代码:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-16 12:57:14

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

代码语言:javascript
复制
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,所以控件返回到您的快递应用程序。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28320272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档