标签: middleware

如何将中间件放在Node.js/Express.js中自己的文件中

我是整个Node.js的新手,所以我仍然试图了解事物如何"连接".

我正在尝试使用快速表单验证.根据您可以做的文档

app.post( '/user', // Route  
  form( // Form filter and validation middleware
    filter("username").trim()
  ),

  // Express request-handler gets filtered and validated data
  function(req, res){
    if (!req.form.isValid) {
      // Handle errors
      console.log(req.form.errors);

    } else {
      // Or, use filtered form data from the form object:
      console.log("Username:", req.form.username);

    }
  }
);
Run Code Online (Sandbox Code Playgroud)

在App.js. 但是,如果我把类似的东西app.get('/user', user.index);放在一个单独的文件中.我想对验证中间件(或将验证代码放在控制器中)做同样的事情,以便在我开始添加更多页面后更容易概述App.js文件.

有没有办法实现这个目标?

基本上我想把类似的东西 app.get('/user', validation.user, user.index);

middleware node.js express

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

mvc6中的应用程序,服务和中间件之间的区别

我试图理解MVC6中的中间件概念.它对我来说仍然含糊不清.我没有真正看到你在Startup课堂上得到的一些"标准"变量之间的差异.

据我所知,有三种不同的方法告诉应用程序它应该使用特定的中间件?

您可以使用服务调用中间件.但这似乎只是为了"添加"中间件?

services.AddMvc();

// Add other services
services.AddScoped<IMyCountriesRepository, MyCountriesRepository>();
services.AddScoped<IEmailer, Emailer>();
Run Code Online (Sandbox Code Playgroud)

那你有IApplicationBuilder app.这是实际使用服务中加载的中间件吗?所以你可以这样称呼:

app.UseMvc();
app.UseErrorPage(...);
app.UseIdentity(); // cookie authentication 
Run Code Online (Sandbox Code Playgroud)

然后有一种方法来加载和使用这样的中间件:

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

有三种类型的注册/使用中间件有什么好处?它们之间的确切差异是什么?

c# middleware asp.net-core-mvc

19
推荐指数
2
解决办法
3025
查看次数

队列管理器和消息代理之间的区别

Websphere Message Broker和队列管理器之间有什么区别.我想队列管理器将消息放入队列,将消息从队列中取出,将消息移到后退队列等等.那么代理的工作是什么?

它位于发布者和队列管理器之间,还是位于消费者和队列管理器之间?

websphere middleware messagebroker mq ibm-mq

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

如何使用OWIN正确记录每个异常

我的问题应该很简单,但不幸的是我没有运气解决它.

基本上,我有一些由OWIN托管并部署在Azure上的Web API控制器.

我真的需要追踪每个中间件中出现的异常(例如OAuthAuthorizationServerProviderSignalR Persistent Connections),但我绝对不知道如何实现它.

  • 我尝试过Elmah,但由于缺少HttpContext,它似乎与OWIN无法正常工作.
  • 我尝试使用log4net,但我只能使用自定义的ExceptionFilterAttribute记录Web API控制器抛出的异常.其他的被忽略.
  • 我尝试定义一个自定义LoggerFactory并在Startup中使用它来分配它app.SetLoggerFactory(new MyLoggerFactory()),但是不会记录其他中间件抛出的异常.
  • 我试图让至少向客户端发送一个有意义的错误消息,但尽管<customErrors mode="Off"/><deployment retail="false"/>,天青拒不归还任何东西,但{"message":"an error has occurred"}..我都尝试Azure网站和Azure的云服务.
  • 我看到一些云替代品与OWIN工作,像Elmah.io或Raygun.io,但我不需要他们的云功能,它肯定是不值得付出数百美元,每年只需登录一些例外.

记录我的应用程序引发的任何可能异常的最佳方法是什么

谢谢你的帮助

logging middleware exception-handling azure owin

18
推荐指数
1
解决办法
6910
查看次数

Auth :: user()返回null

我使用Laravel 5.2并且遇到中间件问题.routes.php中有代码


    use Illuminate\Contracts\Auth\Access\Gate;


    Route::group(['middleware' => 'web'], function () {

        Route::auth();

        Route::get('/', 'HomeController@index');
    });


    Route::group(['prefix'=>'admin',  'middleware' => 'admin'], function(){
        Route::get('/', function(){
            return view('admin.index');
        });
        Route::get('/user', function(){
            return view('admin.user');
        });
    });

Kernel.php:


    protected $routeMiddleware = [
    ...
     'admin' => \App\Http\Middleware\AdminPanel::class,
    ];

AdminPanel.php


    namespace App\Http\Middleware;


    use Closure;
    use Illuminate\Support\Facades\Auth;
    use App\Role;

    class AdminPanel
    {
        public function handle($request, Closure $next)
        {
            $user = Auth::user();
            dd($user);

            if($user){
                $role = Role::whereName('admin')->first();
                if($user->hasRole($role)){
                    return $next($request);
                }
            }
            return redirect('/');
        }

所以,

$user = …
Run Code Online (Sandbox Code Playgroud)

php authentication middleware laravel-5

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

FASTAPI 自定义中间件获取内部请求正文

一直在尝试使用 FASTAPI 中间件获取请求的正文,但似乎我只能获取 request.headers 而不能获取正文。我需要主体才能获得用于检查数据库中某些内容的密钥。考虑中间件的日志记录或身份验证使用。这必须在不自定义 APIRouter 的情况下完成,只需要在中间件级别完成,以免影响应用程序的其余部分。

@app.middleware("http")
    async def TestCustomMiddleware(request: Request, call_next):
    print("Middleware works!", request.headers)

    response = await call_next(request)
    resp_body = [section async for section in response.__dict__['body_iterator']]
    print("BODY:", resp_body)
    return response
Run Code Online (Sandbox Code Playgroud)

我能够得到这个,但有一个错误会破坏 POST 请求:

INFO:     Started server process [37160]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
Middleware works! Headers({'content-type': 'application/json', 'user-agent': 'PostmanRuntime/7.26.8', 'accept': '*/*', 'cache-control': 'no-cache', 'postman-token': 'ca6839ec-833d-45c0-9b52-8f904db13966', 'host': 'localhost:8000', 'accept-encoding': 'gzip, deflate, br', 'connection': 'keep-alive', 'content-length': '12'}) …
Run Code Online (Sandbox Code Playgroud)

python router middleware python-3.x fastapi

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

如何在 NextJS 中间件中获取查询字符串参数

我正在使用 NextJS 中间件,可以nextUrl从请求中获取对象,其中包括路径名等内容,但如何从中间件中获取查询字符串参数?我可以看到它作为 href 返回的字符串的一部分返回,然后我可以自己解析它,但我想知道它是否在它自己的对象中返回?

例如

export const middleware = (request) => {
  const { nextUrl: { query } } = request;
  ...
};
Run Code Online (Sandbox Code Playgroud)

其中query等于

{
  param1: 'foo',
  param2: 'bar',
  etc.
}
Run Code Online (Sandbox Code Playgroud)

javascript middleware next.js

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

为什么在使用 Next.js 中间件时出现此错误?

问题

我正在使用 Next.js、Prisma 和 NextAuth 的电子邮件提供商策略来设置身份验证系统。如果请求不包含有效会话,我想使用 Next.js 中间件来重定向请求。但是对中间件的任何使用,就像在 middleware.js 文件中声明一个函数一样,都会抛出此错误:

error - (middleware)/node_modules/oidc-token-hash/lib/shake256.js (3:0) @ <unknown>
error - Cannot read properties of undefined (reading 'substr')
null
Run Code Online (Sandbox Code Playgroud)

它记录此错误大约 5 次。这是middleware.js文件位于{root}/middleware.js

import { NextResponse } from 'next/server';

export default function middleware(request) {
  return NextResponse.next();
}
Run Code Online (Sandbox Code Playgroud)

这是node_modules/oidc-token-hash/lib/shake256.js错误中指定的文件:

const crypto = require('crypto');

const [major, minor] = process.version.substr(1).split('.').map((x) => parseInt(x, 10));
const xofOutputLength = major > 12 || (major === 12 && minor >= 8);
const shake256 = xofOutputLength && …
Run Code Online (Sandbox Code Playgroud)

javascript middleware node.js next.js next-auth

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

如何仅针对特定路径使用Rack中间件?

我想MyMiddleware在我的Rack应用程序中运行,但仅适用于某些路径.我希望使用Rack::Builder或至少Rack::URLMap,但我不知道如何.

这是我认为可行的,但不是:

# in my rackup file or Rails environment.rb:
map '/foo' do
  use MyMiddleware, { :some => 'options' }
end
Run Code Online (Sandbox Code Playgroud)

或者,更好的是,使用Regexp:

map /^foo/ do
  use MyMiddleware, { :some => 'options' }
end
Run Code Online (Sandbox Code Playgroud)

map似乎最终需要一个应用程序; 它不会仅仅将控制权传回给它的父母.(undefined method 'each' for nil:NilClass当Rack尝试将该do...end块的结尾转换为时,实际错误为" " app.)

是否有一个中间件需要一系列中间件和一个路径,并且只在路径匹配时运行它们?

ruby rack middleware

17
推荐指数
2
解决办法
9783
查看次数

React App - createProxyMiddleware 不是函数

我正在处理一个 React 项目,并且遇到了 http-proxy-middleware 的一些问题。我按照自述文件和我的 setupProxy.js 文件看起来像这样

const {createProxyMiddleware} = require('http-proxy-middleware');


module.exports = function(app) {
  app.use(
    '/api',
    createProxyMiddleware({
      target: 'https://localhost:3000',
      changeOrigin: true
    })
  );
};
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么会发生这种情况?从我所看到的,这是设置它的正确方法。任何回应或建议将不胜感激。

middleware http-proxy reactjs

17
推荐指数
2
解决办法
7090
查看次数