小编mit*_*1os的帖子

如何在Nginx反向代理后面设置MongoDB

大家好我想设置Nginx作为访问MongoDB数据库的反向代理.默认情况下,Mongo侦听27017端口.我想要做的是,通过nginx重定向主机名,例如mongodb.mysite.com,并将其传递给mongodb服务器.以这种方式从外部网络我将关闭我已知的27017端口,并从隐藏的URL访问我的数据库,就像我给出的示例.

所以我试图用这个配置设置Nginx:

server {
        listen 80;
        server_name mongo.mysite.com;
        gzip off;       

        location / {
            proxy_pass http://127.0.0.1:27017;
            proxy_redirect off;
            proxy_buffering off;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
Run Code Online (Sandbox Code Playgroud)

所以在这之后我尝试使用命令从我的cmd连接mongo shell mongo mongo.mysite.com:80,我得到以下错误:

2015-08-06T13:44:32.670+0300 I NETWORK  recv(): message len 1347703880 is invalid. Min 16 Max: 48000000
2015-08-06T13:44:32.670+0300 I NETWORK  DBClientCursor::init call() failed
2015-08-06T13:44:32.674+0300 E QUERY    Error: DBClientBase::findN: transport error: mongo.therminate.com:80 ns: admin.$cmd query: { whatsmyuri: 1 }
    at connect (src/mongo/shell/mongo.js:181:14)
    at (connect):1:6 at src/mongo/shell/mongo.js:181
exception: connect failed
Run Code Online (Sandbox Code Playgroud)

同样在Nginx访问日志中,我得到了这个: …

url proxy redirect nginx mongodb

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

Socket.io 自定义命名空间客户端未收到来自主中间件的错误

我正在开发一个带有 socket.io 通信的项目。基本结构是我设置了一个需要身份验证的自定义命名空间。我通过 JWT (Json Web Tokens) 提供身份验证。

我的问题如下。身份验证作为命名空间中间件提供,如果失败,它会next使用Error. 如果我在自定义命名空间内实现身份验证,一切正常。前任。:

var io = require('socket.io')();
io
    .of('/somePath')
    .use(function authenticate(socket,next){
        if (authenticate.(socket)){
            var err = new Error('UnauthorizedError');
            next(err);
        }
        else{
            next();
        }
    })
    .on('connection',function(){
        console.log('Socket successfully connected to custom namespace /somePath');
    });

io.listen(3000);

//Client Code
var clientIO = require('socket.io-client');

var client = clientIO('http://localhost:3000/somePath');
client.on('connect',function(){
    console.log('Connected to host');
});
client.on('error',function(err){
    console.error(err);
});
Run Code Online (Sandbox Code Playgroud)

客户端通常从命名空间中间件接收错误。

但是,如果我想拥有更多共享相同身份验证逻辑的自定义命名空间,我必须分别为每个命名空间实现逻辑。前任。:

var io = require('socket.io')();
io
    .of('/somePath')
    .use(function authenticate(socket,next){
        if (authenticate.(socket)){
            var err = new …
Run Code Online (Sandbox Code Playgroud)

authentication middleware namespaces node.js socket.io

5
推荐指数
0
解决办法
822
查看次数

Javascript临时死区NodeJS 7.9.0性能下降?

我在另一个问题中注意到使用letvar变量声明时循环的性能差异.

最初的问题是正确回答,letfor循环中使用较慢,因为let为每次迭代创建一个新的作用域来保存let声明的变量的值.还有更多工作要做,所以慢一点是正常的.作为参考,我在NodeJS(7.9.0)执行时给出代码和结果:

请注意,以下所有javascript代码均与NodeJS版本7.9.0相关

常规代码:

'use strict';
console.time('var');
for (var i = 0; i < 100000000; i++) {}
console.timeEnd('var');


console.time('let');
for (let j = 0; j < 100000000; j++) {}
console.timeEnd('let');
Run Code Online (Sandbox Code Playgroud)

输出:

var: 55.792ms
let: 247.123ms
Run Code Online (Sandbox Code Playgroud)

为了避免j在循环的每次迭代中额外的范围声明,我们j在循环之前声明变量.人们可能会认为这应该使let循环性能与之匹配var.但不是!!!这是代码和结果供参考:

let前循环定义的代码:

'use strict';
console.time('var');
for (var i = 0; i < 100000000; i++) {}
console.timeEnd('var');


console.time('let');
let j;
for …
Run Code Online (Sandbox Code Playgroud)

javascript variable-declaration node.js ecmascript-6

5
推荐指数
1
解决办法
110
查看次数

突破Angularjs的承诺

我试图找到一种方法来突破AngularJS代码中的承诺链.显而易见的方法是返回一个对象,然后检查链中每个"then"函数的有效性.

我想找到一种更优雅的方式来突破当时的链条.

break angularjs q angular-promise

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