问题标签 [negroni]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
342 浏览

go - 如何使用 gin 构建带有标签的 golang 应用程序?

我的 golang 应用程序的一个关键组件使用移植的GraphicsMagick 库,该库需要使用-tags gm.

例如:

go build -tags gm

但是,我正在基于negroni 框架构建 Web 服务并使用gin运行它,这允许我使用命令运行应用程序gin。我找不到任何将构建标签传递给杜松子酒的方法。有什么建议么?

0 投票
0 回答
750 浏览

go - Golang 中间件认证取决于路由

我正在用 Go 构建一个 API。我通过在标头中包含一个秘密令牌来处理所有身份验证。我添加了一些使用 negroni 的中间件,这些中间件从标头中挑选出来并检查数据库以查看它是否存在。

这很好,但现在我想根据相关路线进行许可。我在数据库中有一个表,仅对某些路由等具有权限,我想在中间件中使用此逻辑,以便处理程序永远不必担心它。

我的问题是中间件需要知道正在调用什么处理程序,以便它可以检查数据库中的正确记录。使用 negroni 传递或提取当前路由/处理程序的最佳方法是什么?

谢谢

0 投票
1 回答
2391 浏览

go - Negroni:将上下文从中间件传递给处理程序

我正在尝试将 Gorilla 会话添加到Negroni中间件处理程序的请求上下文中,以便我可以在我的 Gorilla Mux 处理程序中访问它。这是我的代码的精简版本:

希望这是有道理的。谁能指出我做错了什么?

0 投票
2 回答
581 浏览

go - negroni 中间件中设置的请求上下文在嵌套的 gorilla Subrouter 中丢失

我的基本main设置:

在里面apiRouter.Middleware我设置了以下上下文:

但是,在某些 handlerFunc 内v1Router.Router尝试获取Get上下文的值时,结果为 nil:

印刷:DomainName <nil>

我知道该Set方法是正确的,因为在将其设置后立即获取该值apiRouter.Middleware将返回正确的字符串值。

0 投票
1 回答
300 浏览

go - 我可以将我的函数用作“negroni”中间件吗

我有一个函数用作每个 GET 请求的包装器:

路由器:

例子:

现在我需要将每个请求包装在路由器中:controllers.WrapHandler(controllers.GetUnreadRssFeeds). 我正在寻找避免它的方法。

我可以将其转换WrapHandler为将其用作negroni中间件吗?有没有办法在negroni中间件函数之间传递数据?

0 投票
1 回答
2228 浏览

go - 在 HTTP 处理程序中提供子目录 [GoLang]

我有以下代码:

/api应该是安全的。如果用户点击/,我希望他们查看目录index.html中的。PROJECTDIR/frontend

前端目录看起来像

index.html 从 加载所有内容/static。无论我如何配置它,当我访问时localhost:3000,我都可以得到index.html但下面的所有内容/static都是 404 的。

我如何错误地配置它?

0 投票
1 回答
2048 浏览

go - 使用 Gorilla MUX 和 Negroni 子路由中间件

我试图仅在某些路由上添加中间件。我写了这段代码:

}

我希望仅看到带有前缀 /admin 的路径的请求日志。我在执行“GET /admin”时确实看到了一条日志行,但在执行“GET /admin/articles/new”时却没有。我通过蛮力尝试了其他组合,但我无法得到它。我的代码有什么问题?

我看到了其他方法,比如在每个路由定义上包装 HandlerFunc,但我想为前缀或子路由器做一次。

我在那里使用的日志记录中间件用于测试,也许 Auth 中间件更有意义,但我只是想让它工作。

谢谢!

0 投票
1 回答
2012 浏览

go - axios 不发送 POST 到 golang api

我有一个带有 negroni 中间件的 golang api 后端。

我已经为 negroni 实现了 CORS 处理程序,所以我的 api 应该允许跨源资源共享。

这来自https://github.com/rs/cors/blob/master/examples/negroni/server.go使用 negroni 实现 CORS 的示例。

尽管如此,我的 api 现在将 200 状态响应回我的前端,但前端不会将 POST 请求发送到服务器。这是我的 axios 代码:

在此处输入图像描述 Postman 发送 POST 请求没有任何问题。我究竟做错了什么?

0 投票
1 回答
833 浏览

go - 请求完成后,Negroni 继续调用其他处理程序

我在 Go 中的 Web 应用程序(使用 Gorillamuxnegroni)有大约 20 个处理程序,根据应该应用的中间件函数分为三组。具体来说:

  • 第 1 组:静态请求(根本没有中间件)

    /li>
  • 第 2 组:应该只有 CORS 中间件,没有身份验证的请求:

    /li>
  • 第 3 组:应同时应用 CORS 和身份验证中间件的请求:

    /li>

这是我设置 HTTP 服务器的代码:

根据Negroni 文档中的“路由特定中间件”部分,我认为这是正确的,其中说:

如果您有一组需要执行特定中间件的路由,您可以简单地创建一个新的 Negroni 实例并将其用作您的路由处理程序。

但是,当我发出请求并使用调试器时,我看到它(*Negroni).ServeHTTP被多次调用。例如,如果我请求,GET /favicon.ico则该staticHandler函数被正确调用并调用WriteHeader(200),但之后它会调用下一个调用,mux.Router该调用WriteHeader(404)会在终端中打印出警告,因为标头被写入了两次(http: multiple response.WriteHeader calls

如果它用于不存在的路由,NotFoundHandler则调用 Gorilla 默认值 3 次(每次调用一次mux.Router)。

请求完成后,如何让 Negroni 停止调用其他处理程序?

...如果我的 Negroni 实例配置错误,为什么它不在初始化期间执行检查以警告我配置无效?

我的理解是,negroni.UseandUseFunc用于设置中间件(每个请求都会调用它们),而UseHandler用于设置终端处理程序(每个请求只调用 1 个,或回退到 404)。如果我正确理解了这种情况,那么出于某种原因,它将我的终端处理程序视为中间件。

0 投票
0 回答
792 浏览

authentication - 仅针对 OPTIONS 请求调用 Negroni CORS 中间件

我正在 Golang 中构建一个 Web 应用程序,使用 mux 作为路由器,使用 Negroni 管理 API 的中间件。

我有以下中间件:

我想酌情将中间件应用于特定的路由,即在所有请求上使用 CORS 中间件并仅在受保护的路由上检查身份验证。

当我尝试使用前端发出 API 请求时,实际发生的情况是,CORS 中间件似乎只在每个 API 路由的初始 OPTIONS 请求中被调用,并且随后没有被使用。

例如:

  • UI 使用包含凭据的 JSON 对象对 /api/login 进行 POST
  • 在浏览器控制台中,我们看到初始 preflight OPTIONS 请求获得了 200 OK,其中我们使用 corsMiddleware 中的 handlePreflight 设置了所有标头,到目前为止一切顺利。
  • 然后后续的 POST 请求都没有命中 corsMiddleware。我们知道中间件永远不会被调用,因为我们从未在服务器日志中看到它被调用过。我们在 Chrome 中收到错误“请求的资源上不存在‘Access-Control-Allow-Origin’标头”。
  • 奇怪的实际上调用了函数 handleLogin,我们可以看到正确的凭据,并且服务器似乎正确地为它们存储了会话。

我们还在其他一些路由上看到了奇怪的东西——即当向 /api/entities 发出 Postman GET 请求时,我们能够在未登录时获取实体列表(应该受到保护)。就好像身份验证中间件一样没有被调用或行为不符合预期。

我对其中一些概念相当陌生,所以也许我误解了一些东西。任何帮助,将不胜感激。

我的代码如下(main.go):

corsMiddleware 的代码如下: