问题标签 [gorilla]

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 回答
35237 浏览

go - 如何将参数传递给我的处理程序

我试图将我的数据库对象传递给我的处理程序,而不是拥有一个全局对象。但我不知道这是否可能,我正在使用 Gorilla Mux 包,我可以看到它需要一个闭包作为第二个参数。

然后定义了我可以使用的参数,理想情况下我希望有第三个这样的参数。

有解决方法吗?还是我需要一个全局 db 对象?我是 Go 新手,所以请详细解释一个可能的答案。

0 投票
2 回答
1356 浏览

go - 使用 Angular.js 使用 Gorilla Mux 路由

我似乎无法正确路由。我正在使用 Gorilla Mux 并且我正在尝试从任何 url 提供我的 angular 应用程序,所以基本上是我的 index.html,除了它们以“/foo”开头。

这个有效:

但是必须有一种更简单的方法,而不是显式声明每条可能的路线,比如这个 PathPrefix("/{blaah}/{blaah}/") thingy... 有了这个,除 /{blaah}/{blaah 之外的任何其他 url }/ 返回未找到的 404 页面,而不是 index.html。

因此,只要可以找到所有内容(静态文件等),我都希望得到服务,但其他所有内容都应返回/public/index.html。

0 投票
3 回答
4506 浏览

mysql - Golang RESTful API 负载测试导致数据库连接过多

我认为我在 Golang 中管理数据库连接池时遇到了严重问题。我使用 Gorilla Web 工具包构建了一个 RESTful API,当只有很少的请求被发送到服务器时,它工作得很好。但现在我开始使用 loader.io 站点执行负载测试。我为这篇长文道歉,但我想给你完整的图片。

在继续之前,这里有一些关于运行 API 和 MySQL 的服务器的信息: 专用主机 Linux 8GB RAM Go 版本 1.1.1 使用 go-sql-driver MySQL 5.1 的数据库连接

使用 loader.io 我可以毫无问题地发送 1000 个 GET 请求/15 秒。但是当我每 15 秒发送 1000 个 POST 请求时,我会收到很多错误,所有这些错误都是 ERROR 1040 too many database connections。许多人在网上报告了类似的问题。请注意,我现在只测试一个特定的 POST 请求。对于这个帖子请求,我确保了以下内容(网上许多其他人也建议了这一点)

  1. 我确保我不使用 Open and Close *sql.DB 来处理短期功能。因此,正如您在下面的代码中看到的那样,我只为连接池创建了全局变量,尽管我在这里接受建议,因为我不喜欢使用全局变量。

  2. 我确保尽可能使用 db.Exec,并且仅在预期结果时使用 db.Query 和 db.QueryRow。

由于上述没有解决我的问题,我尝试设置 db.SetMaxIdleConns(1000),解决了 1000 POST 请求/15 秒的问题。意味着不再有 1040 错误。然后我将负载增加到 2000 个 POST 请求/15 秒,我又开始收到 ERROR 1040。我试图增加 db.SetMaxIdleConns() 中的值,但这并没有什么不同。

variable_name这里我通过运行 SHOW STATUS WHERE = 'Threads_connected'从 MySQL 数据库中获得了一些关于连接数的连接统计信息;

对于 1000 个 POST 请求/15 秒:观察到 #threads_connected ~= 100 对于 2000 个 POST 请求/15 秒:观察到 #threads_connected ~= 600

我还在 my.cnf 中增加了 MySQL 的最大连接数,但这并没有什么不同。你有什么建议?代码看起来不错?如果是,那么可能是连接受到限制。

您将在下面找到代码的简化版本。

0 投票
2 回答
16736 浏览

go - Go and Gorilla Mux NotFoundHandler not working

I just can't get this NotFoundHandler to work. I'd like to serve a static file on every get request, given that it exists, otherwise serve index.html. Here's my simplified router at the moment:

/foo works ok

/file-that-exists works ok

/file-that-doesnt-exist doesn't work - I get 404 page not found instead of index.html

So what am I doing wrong here?

0 投票
1 回答
1049 浏览

google-app-engine - Gorilla mux 子域

如何使用 gorilla mux 添加子域并执行以下操作:

我努力了

但是我不想传递域,因为我每次上传到应用引擎时都需要更改域,而且我认为上面的代码使用应用引擎框架不起作用。

0 投票
1 回答
1348 浏览

go - 内部处理程序中的 Gorilla Mux 路由器仅工作一次,然后给出 404 页面未找到

我使用 Gorillamux作为我的路由器,我的行为非常奇怪。在对服务器的第一个请求中,我得到了一个有效的响应。但在随后的请求中,我收到了一个404 page not found. 控制台中没有错误。

我的代码非常简单(可以直接复制粘贴来测试它):

经过一些代码注释和测试,似乎以下行是罪魁祸首:

这种使用当前请求在处理程序内部获取路由器的方法来自另一个 StackOverflow 帖子:如何从处理程序内部通过其名称调用路由?

但出于一个奇怪的原因,它只工作一次:

如您所见,控制台中没有错误。

有人知道为什么它只能工作一次吗?

0 投票
1 回答
1631 浏览

html - 在 gorilla mux 中渲染 css js img 文件

学习 Gorilla Toolkit 和 golang 所以请在这里轻松一点。想要在其对应的文件夹中呈现 .css、.js 和 .jpeg 文件。

文件结构为:

用 gorilla pat 和 mux 打包 main 如下:

得到错误:

不知道如何通过 func main 运行多个 http 服务器来启动应用程序并渲染嵌套在静态文件夹中的所有文件。

0 投票
1 回答
1603 浏览

go - 大猩猩多路复用器路由在子文件夹中的单独文件中?

我正在尝试构建一个非常简单的 Go web 应用程序,而 golang “每个包一个文件夹”结构让我感到困难。

github.com/gorilla/mux用作路由器和github.com/unrolled/render模板渲染。这意味着我需要在应用程序启动时创建一个新的路由器和一个新的渲染器,并且我需要我的所有路由来访问渲染器。

这在单个文件中非常容易做到:

}

但是,这是我不理解 Go 的地方。因为我想要子文件夹中单独文件中的路由(我的项目会增长),所以这迫使它们位于一个routes包中。当然,这使得渲染器变量不可访问。我不能只在routes包中创建渲染器,因为render.New()调用依赖于我传递大量应用程序特定的东西,如模板文件夹和资产路径的帮助程序。

我沿着使我的处理程序函数在具有已经初始化的渲染器的结构上工作的路线......

但是我仍然对在包中初始化时如何app *App在包中访问它感到困惑。如果你有一个简单的文件列表,Go 中的一切似乎都非常简单,但是一旦你想要一些文件夹结构,包设置就会出现问题。routesmain

我可能在这里缺少一些东西,因此感谢您提供任何帮助。

0 投票
1 回答
630 浏览

go - 在进行中,如何使用带有 gorilla/mux 子路由器的闭包?

似乎有各种各样的使用类似于这个的 HandlerFunc 闭包的例子:http: //codegangsta.gitbooks.io/building-web-apps-with-go/content/controllers/README.html

但是我无法让它与子路由器一起使用。例子:

给我这个错误:

对我做错了什么有任何见解吗?

0 投票
2 回答
909 浏览

go - 如果已设置标头,如何使用自定义 http 处理程序/中间件?

我试图在 go 中链接 HTTP 处理程序以提供一些附加功能,如下所示:

问题是,如果 gorilla/mux 路由器指向的控制器之一已经设置了任何 HTTP 标头(例如,w.WriteHeader(404)w.Header().Set("Content-Type", "application/json")) - 这会默默地破坏任何试图设置或添加自己的标头的“包装器”处理程序,例如压缩处理程序。我看不到任何错误,除非我忘记在某个地方捕获一个错误,但浏览器得到一个无效响应。

是否有任何优雅的方法来处理这个问题,除了将标题存储在某个地方然后让最终处理程序编写它们?这似乎意味着重写处理程序的代码,如果可能的话,我很想避免这种情况。