大家好我想设置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访问日志中,我得到了这个: …
我正在开发一个带有 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) 我在另一个问题中注意到使用let
和var
变量声明时循环的性能差异.
最初的问题是正确回答,let
在for循环中使用较慢,因为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) 我试图找到一种方法来突破AngularJS代码中的承诺链.显而易见的方法是返回一个对象,然后检查链中每个"then"函数的有效性.
我想找到一种更优雅的方式来突破当时的链条.
node.js ×2
angularjs ×1
break ×1
ecmascript-6 ×1
javascript ×1
middleware ×1
mongodb ×1
namespaces ×1
nginx ×1
proxy ×1
q ×1
redirect ×1
socket.io ×1
url ×1