我一直在阅读 COM,其中提到了二进制标准以及如何使语言独立成为可能。实际上什么是二进制标准?在我看来,二进制意味着机器级代码,如果它意味着机器语言,那它怎么可能是独立的呢?
我不断收到此错误
警告:file_get_contents 无法打开流:HTTP 请求失败!HTTP/1.1 401 未经授权
代码
$url = BASE_URL . 'api/v1/users';
$options = array('http' => array(
'method' => 'GET',
'header' => 'Authorization: Bearer '.$token
));
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
Run Code Online (Sandbox Code Playgroud)
我与 api 一起使用的中间件通过 url 参数或标头接受授权;
如果我在参数中使用令牌,它可以工作,但无法通过服务器上的标头发送它,导致在本地主机上工作,
该请求是通过不记名令牌授权的,我没有任何用户名和密码来授权该请求,如下所示,我仅在 url 参数中使用令牌。
知道为什么吗?在不更改所有卷曲请求的情况下我能做什么
$result = file_get_contents(BASE_URL . 'api/v1/users?authorization='.$token, false);
$response = json_decode($result, true);
Run Code Online (Sandbox Code Playgroud) 我正在构建我的 API,并且成功地捕获了我在路由周围设置的中间件上的一些错误,如下所示:
Route::group(['middleware' => \App\Http\Middleware\ExceptionHandlerMiddleware::class], function() {
Route::resource('/address', 'AddressController');
Route::resource('/country', 'CountryController');
Route::resource('/phone', 'PhoneController');
Route::resource('/user', 'UserController');
});
Run Code Online (Sandbox Code Playgroud)
中间件设法捕获以下异常:
Illuminate\Database\Eloquent\ModelNotFoundExceptionIlluminate\Validation\ValidationExceptionException这太棒了。我还知道控制路线中尝试次数的节流机制。因此,我通过邮递员攻击了我的路线http://localhost:8000/api/user,直到出现错误too many attemp。
异常在位于以下位置的文件中引发:
/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php
Run Code Online (Sandbox Code Playgroud)
由于这个论坛主题,我还设法获得了它抛出的异常类型:Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException。
所以最后我的中间件看起来像这样:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Validation\ValidationException;
use Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException;
use Exception;
class ExceptionHandlerMiddleware
{
public function handle($request, Closure $next)
{
$output = $next($request);
try {
if( ! is_null( $output->exception ) ) {
throw new $output->exception;
}
return $output;
}
catch( TooManyRequestsHttpException $e ) { …Run Code Online (Sandbox Code Playgroud) 我是初学者,正在尝试创建一个推荐系统。以下是示例网址
http://dev.lea.com/register?ref=mh2HPLpVSn
Run Code Online (Sandbox Code Playgroud)
我尝试获取推荐字符串。我怎样才能单独获得?是否需要中间件来获取cookie?如果是,那么中间件的代码是什么?我如何在 RegisterController 中获得推荐参考?
这是我的注册控制器。
<?php
namespace Lea\Http\Controllers\Auth;
use DB;
use Lea\User;
use Lea\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Http\Request;
use Cookie;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after …Run Code Online (Sandbox Code Playgroud) 在 中go-chi,在单个路由级别设置中间件,而不仅仅是针对所有路由全局设置
// Routes creates a REST router
func Routes() chi.Router {
r := chi.NewRouter()
r.Use(middleware.Captcha)
r.Post("/", Login)
return r
}
Run Code Online (Sandbox Code Playgroud)
如何Login指定唯一的中间件或从通用中间件中排除?
当我的应用程序启动时,会创建一个对象,该对象在整个应用程序中的多个文件中使用。在我的 app.js 文件中,我需要几个包含我的路由的文件。这些路由需要访问在 app.js 中创建的对象,所以我试图将它传递给这些文件中的每一个。下面是其中一个文件的示例。
测试.js
const express = require('express');
const router = express.Router();
router.use('/api', router);
router.post('/testRoute', (req, res, next) => {
if(globalVariable.abc) { //globalVariable is the variable created in app.js
//do some logic
}
res.json({
message: "Test Route Success"
})
});
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
应用程序.js
const assessmentRoutes = require('./routes/test');
app.use(assessmentRoutes);
Run Code Online (Sandbox Code Playgroud)
我试图让变量传入的一种方法是将 test.js 中的路由包装在一个函数中,该函数采用这样的变量。
module.exports = function(globalVariable) {
router.post('/testRoute', (req, res, next) => {
if(globalVariable.abc) { //globalVariable is the variable created in app.js
//do some logic
}
res.json({
message: "Test …Run Code Online (Sandbox Code Playgroud) 这是我的代码在这里..!
const express = require('express');
const app = express();
let myFunc = function (req, res, next) {
console.log('This is middleware');
next();
}
app.use(myFunc);
app.get('/', (req, res) => {
console.log('This is get /');
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server is running at port 3000....');
});
Run Code Online (Sandbox Code Playgroud)
在此,我创建了一个名为 myFunc 的中间件,但输出并不像我想象的那样
Server is running at port 3000....
This is middleware
This is get /
This is middleware
Run Code Online (Sandbox Code Playgroud) 我在 sdk V4 Bot 中实现了一个中间件来拦截 bot 和用户之间的每条消息并记录该自定义 mongo Db。我正在尝试为使用 SDK v4 构建的 Bot 实现类似的概念。看起来我可以使用以下代码添加中间件,但是不确定如何区分机器人到用户和用户到机器人之间的消息。
V3 机器人代码
bot.use({
botbuilder: function (session, next) {
logUserConversation(session)
next()
},
send: function (event, next) {
logBotsConversation(event)
next()
}
})
Run Code Online (Sandbox Code Playgroud)
中间件的 V4 bot 代码
botAdapter.use(async (turnContext, next) => {
// How to find which messages/activity object is from user to bot
await next();
// How to find which messages/activity object is from bot to user.
});
Run Code Online (Sandbox Code Playgroud) 试图让中间件在 Fastify 中工作 - 我似乎无权访问查询或参数。文档说:
Fastify 支持开箱即用的 Express/Restify/Connect 中间件,这意味着您只需插入旧代码即可运行!(顺便说一下,更快)
但举个简单的例子:
fastify.use(function(req, res, next) {
console.log('req.query', req.query); // undefined
console.log('req.params', req.params); // undefined
next();
});
Run Code Online (Sandbox Code Playgroud)
如果我添加/限制网址,则相同:
fastify.use('/foo', function(req, res, next) {
Run Code Online (Sandbox Code Playgroud)
我确定我遗漏了一些东西,但文档确实声称它“正常工作”-如果您无法访问 qs,我看不出怎么办?
[我想我可以重写以使用钩子,但我真的很感兴趣我打算如何使用中间件来做到这一点]
谢谢
因此,我创建了一个 .net 核心中间件,用于向响应添加标头。我没有找到对这个中间件进行单元测试的方法,因为它使用OnStarting回调,我无法想象如何模拟或强制执行它。
这是中间件的示例:
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
context.Response.OnStarting(() =>
{
context.Response.Headers.Add("Name", "Value");
return Task.CompletedTask;
});
await next(context);
}
Run Code Online (Sandbox Code Playgroud)
由于中间件接口需要 的具体实例HttpContext,例如,我无法想象使用 来模拟它的方法FakeItEasy。
middleware ×10
node.js ×4
express ×2
javascript ×2
laravel ×2
php ×2
.net ×1
asp.net-core ×1
botframework ×1
c# ×1
com ×1
dcom ×1
fastify ×1
go ×1
go-chi ×1
http ×1
laravel-5 ×1
referrals ×1
routes ×1
slim ×1
testing ×1
throttling ×1
xunit ×1