我是整个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);
我试图理解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)
有三种类型的注册/使用中间件有什么好处?它们之间的确切差异是什么?
Websphere Message Broker和队列管理器之间有什么区别.我想队列管理器将消息放入队列,将消息从队列中取出,将消息移到后退队列等等.那么代理的工作是什么?
它位于发布者和队列管理器之间,还是位于消费者和队列管理器之间?
我的问题应该很简单,但不幸的是我没有运气解决它.
基本上,我有一些由OWIN托管并部署在Azure上的Web API控制器.
我真的需要追踪每个中间件中出现的异常(例如OAuthAuthorizationServerProvider或SignalR Persistent Connections),但我绝对不知道如何实现它.
app.SetLoggerFactory(new MyLoggerFactory()),但是不会记录其他中间件抛出的异常.<customErrors mode="Off"/>和<deployment retail="false"/>,天青拒不归还任何东西,但{"message":"an error has occurred"}..我都尝试Azure网站和Azure的云服务.记录我的应用程序引发的任何可能异常的最佳方法是什么?
谢谢你的帮助
我使用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) 一直在尝试使用 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) 我正在使用 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) 我正在使用 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) 我想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.)
是否有一个中间件需要一系列中间件和一个路径,并且只在路径匹配时运行它们?
我正在处理一个 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)
任何人都知道为什么会发生这种情况?从我所看到的,这是设置它的正确方法。任何回应或建议将不胜感激。