我想用像***这样的星号替换MongoDB连接字符串中的密码。所以,改为
的mongodb://约翰:pwd897 @ SOME_URL:234 / DATABASE_NAME
应该是
的mongodb://约翰:*** @ SOME_URL:234 / DATABASE_NAME
我正在尝试使用regexp来解析它:
^(mongodb:(?:\/{2})?)((\w+?):(\w+?)@|:?@?)(\w+?):(\d+)\/(\w+?)$
看起来我需要更换4美元。但我无法弄清楚该怎么做。其中一个原因是字符串的某些部分可能不存在,包括密码本身。
答案 0 :(得分:3)
已编辑,因此适用于包含:
的密码:
var str = "mongodb://john:lal:ala@some_url:234/database_name";
str = str.replace(/\/\/([^:]+):(.*)@/,"//$1:***@");
console.log(str); // <- mongodb://john:***@some_url:234/database_name
要标记用户名和密码,您可以使用例如:
var str = "mongodb://john:lal:ala@some_url:234/database_name";
str = str.replace(/\/\/([^:]+):(.*)@/,"//***:***@");
console.log(str); // <- mongodb://***:***@some_url:234/database_name
或者只是:
var str = "mongodb://john:lal:ala@some_url:234/database_name";
str = str.replace(/\/\/.*@/,"//***:***@");
console.log(str); // <- mongodb://***:***@some_url:234/database_name
答案 1 :(得分:0)
通用模块connection-string自动处理所有此类情况。
将连接字符串解析为一个对象后:
const ConnectionString = require('connection-string');
const cs = new ConnectionString('mongodb://john:pwd897@some_url:234/database_name');
您可以生成一个新的连接字符串,可以选择对密码进行哈希处理:
cs.toString({passwordHash: true})
//=> mongodb://john:######@some_url:234/database_name
或者您可以指定要使用的自定义符号:
cs.toString({passwordHash: '*'})
//=> mongodb://john:******@some_url:234/database_name
请参见方法toString。
答案 2 :(得分:-2)