Connect/Express捆绑了两个与会话相关的中间件.有什么不同?我该如何选择?
我假设会话中间件与cookieSession中间件相同,但具有额外的存储机制.
我想验证一些东西,但无法在Express文档或在线上找到任何关于此的内容(虽然我知道这是一个功能).
我可以测试一下,但我真的没有一个很好的模板,并希望听到社区的意见.
如果我在Express中定义一条路线,如下:
app.get('/', function (req, res) {
  res.send('GET request to homepage');
});
我也可以定义一个中间件并直接加载它,例如
middleware = function(req, res){
  res.send('GET request to homepage');
});
app.get('/', middleware)
但是,我也可以链接这些路由中的至少一个来运行额外的中间件,例如身份验证,如下:
app.get('/', middleware, function (req, res) {
  res.send('GET request to homepage');
});
这些是无限可链接的吗?如果我愿意,我可以在给定路线上粘贴10个中间件功能吗?我想看看app.get可以接受的参数,但提到我在文档中找不到它.
(节点:13176)[DEP_WEBPACK_DEV_SERVER_ON_AFTER_SETUP_MIDDLEWARE] DeprecationWarning:“onAfterSetupMiddleware”选项已弃用。请使用“setupMiddlewares”选项。(用于node --trace-deprecation ...显示创建警告的位置)(节点:13176)[DEP_WEBPACK_DEV_SERVER_ON_BEFORE_SETUP_MIDDLEWARE] DeprecationWarning:“onBeforeSetupMiddleware”选项已弃用。请使用“setupMiddlewares”选项
我正在将构建在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)并且是必需的和加载的config.ru.
我目前正在使用Compojure(以及Ring和相关的中间件)在Clojure中编写API.
我正在尝试根据路由应用不同的身份验证代码.请考虑以下代码:
(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到根在一个共同的基本路径部分航线,但它是一个相当的限制(下面的代码可能无法正常工作,它只是说明的想法):
(defroutes user-routes
  (GET "-endpoint1" [] ("USER ENDPOINT 1"))
  (GET "-endpoint2" [] ("USER ENDPOINT 1")))
(defroutes admin-routes
  (GET "-endpoint" [] ("ADMIN ENDPOINT")))
(def app
  (handler/api
    (routes …我正在研究一个Django项目并正在为它编写单元测试.但是,在测试中,当我尝试登录用户时,我收到此错误:
MessageFailure: You cannot add messages without installing django.contrib.messages.middleware.MessageMiddleware
登录实际站点工作正常 - 并使用MessageMiddleware显示登录消息.
在我的测试中,如果我这样做:
from django.conf import settings
print settings.MIDDLEWARE_CLASSES
然后它输出:
('django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware')
这似乎表明在运行测试时安装了MessageMiddleware.
我有一个明显的步骤吗?
UPDATE
根据下面的建议,它确实看起来像是一个设置的东西.
我目前settings/__init__.py喜欢这个:
try:
    from settings.development import *
except ImportError:
    pass
并settings/defaults.py包含大部分标准设置(包括MIDDLEWARE_CLASSES).然后settings.development.py覆盖其中一些默认值,如下所示:
from defaults import *
DEBUG = True
# etc
使用开发设置看起来我的开发站点本身工作正常.但是,虽然测试似乎加载设置OK(默认和开发)settings.DEBUG设置为False.我不知道为什么,或者这是否是问题的原因.
在Django中有一个设置文件,用于定义要在每个请求上运行的中间件.此中间件设置是全局的.有没有办法在每个视图的基础上指定一组中间件?我希望特定的URL使用一组与全局集不同的中间件.
这可能不是我的正确方法,但我想有条件地将一个对象/参数添加到appexpressJS/connectjS中间件调用内的变量中.
由于此功能是回调,app从中间件调用中访问的标准/最佳方式是什么?
  //app.js
  var myMiddleware = require('./lib/mymiddleware.js');
  ...
  app.configure( function(){
    app.use( myMiddleware.func() );
    ...
  }
  if( 'object' !== typeof app.myObject ){
    cry( 'about it' );
  } 
  //mymiddleware.js
  module.exports.func = function( ){
    return function( req, res, next ){
       //append app object
       //app.myObject = {}
       next();
    }
  };
注意,这不是用于locals或settings稍后呈现的内容,而是稍后将在执行链中的路由和套接字中使用的内容.
建议的方法是将所有不安全的传入请求重定向到HTTPS.我是否需要编写中间件组件?如果是这样,我无法弄清楚如何获取服务器名称.
public class RedirectHttpMiddleware
{
    RequestDelegate _next;
    public RedirectHttpMiddleware(RequestDelegate next)
    {
        _next = next;
    }
    public async Task Invoke(HttpContext context)
    {
        if (context.Request.IsSecure)
            await _next(context);
        else
        {
            var server = "";  // How do I get the server name?
            context.Response.Redirect("https://" + server + context.Request.Path);
        }
    }
}