这应该是非常明显的,但我无法理解它
如何在Docpad中添加额外路线?
我正在寻找与express.js相同的Docpad
app.post("*", function(res,req,next){
//Do stuff
}
据我所知,我需要为此创建一个插件模块? 如何告诉Docpad使用我的路线? 我猜它与扩展服务器事件有关,我把它作为参数放在docpad.coffee中吗?
如何将req对象传递给路由处理程序?
我可以强制docpad始终首先考虑我的路由吗?有点像中间件? 我可以将(已处理的)网址传递回docpads标准路由吗?如何?
答案 0 :(得分:1)
你在寻找这样的东西:
server.get /list\/[a-zA-Z]+/, (req,res,next) ->
document = docpad.getCollection('documents').findOne({relativeOutPath: 'index.html'});
docpad.serveDocument({
document: document,
req: req,
res: res,
next: next,
statusCode: 200
});
这是docpad.coffee文件中的事件(服务器扩展)。它拦截请求并针对正则表达式进行测试(很容易就是一个简单的URL)。用户将看到他们输入的网址,但会提供index.html。
或者更接近您的情况:
server.post "*", (req,res,next) ->
#do stuff
在docpad.coffee里面
events:
# Server Extend
# Used to add our own custom routes to the server before the docpad routes are added
serverExtend: (opts) ->
# Extract the server from the options
{server} = opts
docpad = @docpad
# As we are now running in an event,
# ensure we are using the latest copy of the docpad configuraiton
# and fetch our urls from it
latestConfig = docpad.getConfig()
oldUrls = latestConfig.templateData.site.oldUrls or []
newUrl = latestConfig.templateData.site.url
server.post "*", (req,res,next) ->
#do stuff