我正在使用Compojure(以及Ring和相关的中间件)在Clojure中编写一个API。 我试图根据路线应用不同的validation码。 考虑下面的代码: (defroutes public-routes (GET "/public-endpoint" [] ("PUBLIC ENDPOINT"))) (defroutes user-routes (GET "/user-endpoint1" [] ("USER ENDPOINT 1")) (GET "/user-endpoint2" [] ("USER ENDPOINT 1"))) (defroutes admin-routes (GET "/admin-endpoint" [] ("ADMIN ENDPOINT"))) (def app (handler/api (routes public-routes (-> user-routes (wrap-basic-authentication user-auth?))))) (-> admin-routes (wrap-basic-authentication admin-auth?))))) 这不能按预期的方式工作,因为wrap-basic-authentication的确包装了路由,所以无论缠绕的路由如何都可以尝试。 具体来说,如果请求需要路由到admin-routes , user-auth? 仍然会被尝试(并失败)。 我使用context来根据一个共同的基本path下的一些路由,但它是一个相当的约束(下面的代码可能无法正常工作,只是为了说明这个想法): (defroutes user-routes (GET "-endpoint1" [] […]
我正在将一些内置于Rails应用程序中的逻辑重构为中间件,而我遇到的一个烦恼就是似乎缺乏将它们放在哪里的惯例。 目前我已经解决了app/middleware但我可以轻松地将其移动到vendor/middleware或vendor/plugins/middleware … 最大的问题是必须要求config/environment.rb顶部的单个文件 require "app/middleware/system_message" require "app/middleware/rack_backstage" 否则我会在config.middleware.use行中得到未初始化的常量错误。 这可能很快就会变得混乱。 我宁愿把它藏在某个地方的初始化程序中。 有没有一个传统的地方把这东西? 我正在寻找这个赏金的具体答案是: 在哪里可以把需求线,以便他们不混乱的environment.rb文件,但仍然会在config.middleware.use调用之前加载? 我所尝试的一切都会导致未初始化的常量错误。 更新 :现在我们正在使用Rails 3.0,我像其他Rack应用程序一样对待Rails应用程序; 中间件的代码文件进入lib (或Gemfile列出的Gemfile ),并且需要并在config.ru加载。
Connect / Express捆绑了两个会话相关的中间件。 有什么不同? 我该如何select? 我假设会话中间件与cookieSession中间件相同,但具有额外的存储机制。
那么我的问题是我想通过一些variables从第一个中间件到另一个中间件,我尝试这样做,但有req.somevariable是一个给定的'未定义'。 //app.js .. app.get('/someurl/',middleware1,middleware2) … ////middleware1 … some conditions … res.somevariable = variable1; next(); … ////middleware2 … some conditions … variable = req.somevariable; … 谢谢回答。
我听说很多人最近在谈论中间件 ,但中间件的确切定义是什么? 当我研究中间件的时候,我发现了很多信息和一些定义,但是在阅读这些信息和定义的时候,似乎大多数“商品”都处于某种东西的中间。 那么,所有东西都是中间件吗? 还是你有一个不是中间件的软件的例子?
我使用Express 4.0,我意识到身体parsing器已经被取出了快速核心,我使用推荐的替代品,但是我越来越 body-parser deprecated bodyParser: use individual json/urlencoded middlewares server.js:15:12 body-parser deprecated urlencoded: explicitly specify "extended: true" for extended parsing node_modules/body-parser/index.js:74:29 我在哪里可以find这个假设的中间件? 或者我不应该得到这个错误? var express = require('express'); var server = express(); var bodyParser = require('body-parser'); var mongoose = require('mongoose'); var passport = require('./config/passport'); var routes = require('./routes'); mongoose.connect('mongodb://localhost/myapp', function(err) { if(err) throw err; }); server.set('view […]
我有兴趣为iPhone和Android平台编写应用程序。 我希望find一个中间件/框架,抽象出API中的一些差异,并允许我在构build时指定目标平台。 有没有这样的框架存在或计划?
尽pipe知道JavaScript非常好,但我很困惑Node.js生态系统中的这三个项目究竟做了什么。 这是像Rails的机架吗? 有人可以解释吗?
在我问及app.router之前,我想我应该至less解释一下我在使用中间件时会发生什么。 要使用中间件,要使用的函数是app.use() 。 当中间件被执行时,它将使用next()调用下一个中间件,或者使其不再调用中间件。 这意味着我放置中间件的顺序是很重要的,因为有些中间件依赖于其他中间件,有些中间件甚至可能不会被调用。 今天我正在处理我的应用程序,并让我的服务器在后台运行。 我想做一些改变,刷新我的网页,立即看到变化。 具体来说,我正在改变我的布局。 我无法得到它的工作,所以我search堆栈溢出的答案,并发现这个问题 。 它说确保express.static()在require('stylus')之下。 但是当我看着OP的代码的时候,我看到他在中间件调用的最后有他的app.router调用,我试图找出原因。 当我制作了我的Express.js应用程序(版本3.0.0rc4)时,我使用了命令express app –sessions –css stylus并在我的app.js文件中使用我的app.router安装了express.static()并require('stylus')调用。 所以看来,如果它已经以这种方式设置,那么它应该保持这种方式。 重新安排我的代码后,我可以看到我的触笔更改,它看起来像这样: app.configure(function(){ //app.set() calls //app.use() calls //… app.use(app.router); app.use(require('stylus').middleware(__dirname + '/public')); app.use(express.static(__dirname + '/public', {maxAge: 31557600000})); }); app.get('/', routes.index); app.get('/test', function(req, res){ res.send('Test'); }); 所以我决定,第一步是找出为什么在我的代码中甚至有app.router是非常重要的。 所以我评论说,开始我的应用程序,并导航到/ 。 它显示我的索引页面很好。 嗯,也许它工作,因为我从我的路线文件(routes.index)导出路由。 所以接下来我导航到/test并在屏幕上显示testing。 哈哈,好的,我不知道app.router是做什么的。 无论是否包含在我的代码中,我的路由都很好。 所以我肯定错过了一些东西。 所以这里是我的问题: 有人可以解释一下app.router作用,它的重要性,以及我应该把它放在我的中间件调用中? 如果我对express.static()有一个简单的解释,那也是很好的。 据我所知, […]