标签: middleware

未找到Laravel 5 Function()

我正在组建一个具有受保护部分的站点,用户必须登录才能访问.我在Laravel 4中完成了这个,没有太多事故.然而,对于我的生活,我无法弄清楚为什么我不能让它在Laravel 5(L5)中工作.

在L5中,中间件被引入.这会将路径文件更改为:

Route::get('foo/bar', ['middleware'=>'auth','FooController@index']);
Route::get('foo/bar/{id}', ['middleware'=>'auth','FooController@show']);
Run Code Online (Sandbox Code Playgroud)

只要不包含中间件,路由就可以正常工作.

当使用中间件访问路由时,结果并不是那么有趣.

哎呀,看起来像出事了.

Route.php第150行中的ReflectionException:

Function()不存在

非常感谢任何见解,帮助和/或帮助.我已经完成了Google电路,找不到任何与我当前困境有关的内容.提前致谢.

php middleware laravel laravel-routing laravel-5

34
推荐指数
3
解决办法
1万
查看次数

如何在快递中输入每条路线之前使用中间件检查授权?

我想在输入网址时检查我的网络应用用户的授权.但是,当我使用单独的中间件来检查授权时,它对已有的路由没用,例如:

function authChecker(req, res, next) {
    if (req.session.auth) {
        next();
    } else {
       res.redirect("/auth");
    }
}

app.use(authChecker);
app.get("/", routes.index);
app.get("/foo/bar", routes.foobar);
Run Code Online (Sandbox Code Playgroud)

authChecker是unabled检查谁进入两个URL的用户的权限.它仅适用于未指定的URL.

我看到了一种方法,我可以将authChecker放在路由和路由处理程序之间,例如:

app.get("/", authChecker, routes.index);
Run Code Online (Sandbox Code Playgroud)

但是,我怎样才能以简单的方式实现它,而不是将authChecker放在每个路径中?

middleware node.js express

33
推荐指数
2
解决办法
3万
查看次数

如何从Rails中访问Rack环境?

我有一个看起来像这样的Rack应用程序:

class Foo
  def initialize(app)
    @app = app
  end
  def call(env)
    env["hello"] = "world"
    @app.call(env)
  end
end
Run Code Online (Sandbox Code Playgroud)

将我的Rack应用程序挂钩到Rails后,如何env["hello"]从Rails中获取访问权限?

更新:感谢Gaius的回答.Rack和Rails允许您在请求期间或会话持续时间内存储内容:

# in middleware
def call(env)
  Rack::Request.new(env)["foo"] = "bar"  # sticks around for one request

  env["rack.session"] ||= {}
  env["rack.session"]["hello"] = "world" # sticks around for duration of session
end

# in Rails
def index
  if params["foo"] == "bar"
    ...
  end
  if session["hello"] == "world"
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby rack middleware ruby-on-rails

31
推荐指数
2
解决办法
2万
查看次数

路由后的Node Express 4中间件

在升级到Express 4并删除app.router后,我很难在路由执行后让中间件执行.

例如,以下代码正确响应"hello",但从不调用配置的中间件

var express = require( "express" )();

express.get( "/", function( req, res ) {

    res.send( "hello" );

} );
express.use( function( req, res, next ) {

    console.log( "world" );
    next();

} );

express.listen( 8888 );
Run Code Online (Sandbox Code Playgroud)

澄清:

以下代码在控制台上显示"之前",但不是"之后":

var express = require( "express" )();

express.use( function( req, res, next ) {

    console.log( "before" );
    next();

} );
express.get( "/", function( req, res ) {

    res.send( "hello" );

} );
express.use( function( req, res, next ) {

    console.log( "after" ); …
Run Code Online (Sandbox Code Playgroud)

middleware node.js express express-4

31
推荐指数
2
解决办法
2万
查看次数

为什么ASP.NET Core中的中间件需要特定的语义,而不是接口?

众所周知,ASP.NET Core中方法Configure(类Startup)的IApplicationBuilder需要特定的语义(使用HttpContext类型的输入参数和作为返回值的Task的方法'Invoke').但为什么它没有作为接口实现?我可以写类似的东西:

public class FakeMiddleware
{

}
Run Code Online (Sandbox Code Playgroud)

并注册:

    app.UseMiddleware<FakeMiddleware>();
Run Code Online (Sandbox Code Playgroud)

我们会得到一个运行时错误.当然,它是微不足道的东西,易于找到和修复,但它实现如此粗糙,没有界面?

middleware interface owin owin-middleware asp.net-core

29
推荐指数
2
解决办法
1476
查看次数

如何编写自定义 FastAPI 中间件类

我已经阅读了 FastAPI 关于中间件的文档(特别是中间件教程CORS 中间件部分高级中间件指南),但找不到如何编写可以使用该add_middleware函数添加的中间件类的具体示例(相反到使用装饰器添加的基本中间件功能),也不在此站点上。

我更喜欢使用add_middleware基于应用程序的装饰器的原因是,我想在共享库中编写一个中间件,该库将由多个不同的项目使用,因此我无法将其绑定到特定实例FastAPI

所以我的问题是:你是如何做到的?

python middleware fastapi

29
推荐指数
2
解决办法
4万
查看次数

Gulp browser-sync - 通过代理重定向API请求

我正在尝试使用gulp和browser-sync重定向我的API请求:

gulp.task('browser-sync', function () {

   var files = [
      '../index.html',
      '../views/**/*.html',
      '../assets/css/**/*.css',
      '../assets/js/**/*.js'
   ];

   var url = require('url'),
   proxy = require('proxy-middleware');
   var proxyOptions = url.parse('http://localhost:8000/api');
   proxyOptions.route = '/api';

   browserSync.init(files, {
      server: {
         baseDir: '..',
         middleware: [proxy(proxyOptions)]
      }
   });

});
Run Code Online (Sandbox Code Playgroud)

但是当我向API发送一个调用时,我得到了这个响应:

Error: connect ECONNREFUSED
    at errnoException (net.js:904:11)
    at Object.afterConnect [as oncomplete] (net.js:895:19)
Run Code Online (Sandbox Code Playgroud)

关于我做错了什么的任何想法?

api proxy middleware gulp browser-sync

27
推荐指数
2
解决办法
4万
查看次数

获取通用机架应用程序中的有序中间件列表?

我正在寻找的功能类似于rake middlewareRails中的命令,但通用机架应用程序除外.

ruby rake rack middleware

26
推荐指数
2
解决办法
1万
查看次数

如何正确处理Express中的错误?

我开始使用Express JS并遇到了一个问题.我似乎无法弄清楚处理错误的正确方法.

例如,我有一个Web服务API,它提供一个名为"event"的对象.当用户提交未找到的事件ID时,我想返回一个简单的"无法查找事件"字符串.以下是我目前正在构建代码的方式:

app.get('/event/:id', function(req, res, next) {
    if (req.params.id != 1) {
        next(new Error('cannot find event ' + req.params.id));
    }

    req.send('event found!');
});
Run Code Online (Sandbox Code Playgroud)

当我提交1以外的ID时,Node会崩溃并输出以下内容:

http.js:527
   throw new Error("Can't set headers after they are sent.");
         ^
Error: Can't set headers after they are sent.
    at ServerResponse.<anonymous> (http.js:527:11)
    at ServerResponse.setHeader (/usr/local/kayak/node_modules/express/node_modules/connect/lib/patch.js:62:20)
    at /usr/local/kayak/node_modules/express/node_modules/connect/lib/middleware/errorHandler.js:72:19
    at [object Object].<anonymous> (fs.js:107:5)
    at [object Object].emit (events.js:61:17)
    at afterRead (fs.js:878:12)
    at wrapper (fs.js:245:17)
Run Code Online (Sandbox Code Playgroud)

从我通过使用node.js 调试器可以看出,在next()调用后继续执行代码块,这意味着req.send('event found!')尝试运行.我不希望这种情况发生.

我发现的唯一解决方法是简单地抛出一个new Error()而不是"next-ing"它,但这会导致生成默认的Express …

javascript middleware node.js express

24
推荐指数
3
解决办法
3万
查看次数

如何在laravel5中向中间件抛出禁止的异常?

我正在laravel5中编写一个中间件,我希望通过中间件的代码403通过禁止的异常.我的中间件功能如下.

use Exception;

public function handle($request, Closure $next)
{
    if (!Auth::check()) {
        throw new Exception("Access denied", 403);
    }
    return $next($request);
}
Run Code Online (Sandbox Code Playgroud)

我从控制器调用中间件,我收到代码500但不是403的错误消息.我怎么解决这个问题?

php middleware exception laravel laravel-5

24
推荐指数
1
解决办法
1万
查看次数