弃用警告:当我将脚本移动到另一台服务器时,由于安全性和可用性问题,Buffer() 已被弃用



脚本移动到其他服务器时出错。

(节点:15707( [DEP0005] 弃用警告:由于安全性和可用性问题,Buffer(( 已被弃用。请改用 Buffer.alloc((、Buffer.allocUnsafe(( 或 Buffer.from(( 方法。

当前版本:

Ubuntu 16.04.4 LTS  
Node - v10.9.0  
NPM - 6.2.0  

以前的版本:

Ubuntu 14.04.3 LTS
NPM - 3.10.10
Node - v6.10.3


exports.basicAuthentication = function (req, res, next) {
console.log("basicAuthentication");
if (!req.headers.authorization) {
return res.status(401).send({
message: "Unauthorised access"
});
}
var auth = req.headers.authorization;
var baseAuth = auth.replace("Basic", "");
baseAuth = baseAuth.trim();
var userPasswordString = new Buffer(baseAuth, 'base64').toString('ascii');
var credentials = userPasswordString.split(':');
var username = credentials[0] !== undefined ? credentials[0] : '';
var password = credentials[1] !== undefined ? credentials[1] : '';
var userQuery = {mobilenumber: username, otp: password};
console.log(userQuery);
User.findOne(userQuery).exec(function (err, userinfo) {
if (err || !userinfo) {
return res.status(401).send({
message: "Unauthorised access"
});
} else {
req.user = userinfo;
next();
}
});
}
new Buffer(number)            // Old
Buffer.alloc(number)          // New

new Buffer(string)            // Old
Buffer.from(string)           // New

new Buffer(string, encoding)  // Old
Buffer.from(string, encoding) // New

new Buffer(...arguments)      // Old
Buffer.from(...arguments)     // New

请注意,在当前的 Node.js 版本上,Buffer.alloc(( 也比新的 Buffer(size(.fill(0( 更快,这是您确保零填充所必需的。

使用已弃用的new Buffer()构造函数(即 Yarn 使用的构造函数(可能会导致弃用警告。因此,不应使用已弃用/不安全的缓冲区构造函数。

根据弃用警告,new Buffer()应替换为以下之一:

  • Buffer.alloc()
  • Buffer.allocUnsafe()
  • Buffer.from()

为了避免此问题,另一种选择是改用安全缓冲区包。

您也可以尝试(使用纱线时..(:

yarn global add yarn

如下所述:链接

评论中的另一个建议(感谢gkiely(:自我更新

注意:自我更新不可用。请参阅在项目中强制实施版本的策略

要更新您的 Yarn 版本,请运行

curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
var userPasswordString = new Buffer(baseAuth, 'base64').toString('ascii');

将代码中的这一行更改为此行 -

var userPasswordString = Buffer.from(baseAuth, 'base64').toString('ascii');

或者就我而言,我以相反的顺序给出了编码

var userPasswordString = Buffer.from(baseAuth, 'utf-8').toString('base64');

然后让我们为那些遇到错误的人举一个小例子。

根据需要,也可以使用 Buffer.from(string( 代替 Buffer.alloc(size(

使用 Buffer.alloc(size(

buf = Buffer.alloc(26); 
for (var i = 0; i < 26; i++) {
buf[i] = i + 97;}
console.log(buf.toString('ascii'));
console.log(buf.toString('ascii'));
console.log(buf.toString('utf8'));
console.log(buf.toString(undefined));

使用 Buffer.from(string(

var buffer1 = Buffer.from('Hello Word!!!!');
var buffer2 = Buffer.from('Hello nldflsd343');

其余代码无关紧要,但它确实显示了一些缓冲区用法。

var buffer3 = Buffer.concat([buffer1, buffer2]);
console.log("buffer3 content: " + buffer3.toString());
var result = buffer1.compare(buffer2);
if (result < 0) {
console.log(buffer1 + "comes before " + buffer2);
} else if (result == 0) {
console.log(buffer1 + "is same as " + buffer2);
} else if (result > 0) {
console.log(buffer1 + "comes before " + buffer2);
}

希望它对您的业务有益

最新更新