DeprecationWarning:当我将脚本移动到另一台服务器时,由于安全性和可用性问题,不建议使用Buffer()


128

脚本移至其他服务器时出现错误。

(节点:15707)[DEP0005] DeprecationWarning:由于安全性和可用性问题,不建议使用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();
        }
    });

 }

1
你检查了这个线程吗?github.com/yarnpkg/yarn/issues/5770
Hemadri Dasari '18

4
这不是错误,它是警告不赞成使用此创建缓冲区的方法:nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding
stdob--

Answers:


312
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)更快,否则,您需要确保零​​填充。


3
如果我的代码中没有任何新的Buffer()怎么办?我只是在package-lock.json中有它?
哈立德·贾马尔

@KhaledJamal你在package-lock.json中到底有什么?
Nebojsa Sapic

2
@NebojsaSapic在跟踪问题之后,我发现在我向项目添加了角度通用性后,server.js正在使用它,我相信它是因为我没有使用最新版本的It。
哈立德·贾马尔

@KhaledJamal感谢您提出问题,如果有人
遇到

当我通过添加角度通用将我的角度项目转换为服务器端渲染时,也遇到了与@KhaledJamal相同的问题。
user2869612 19-10-24

16

使用不推荐使用的new Buffer()构造函数(Yarn使用的iE)会导致不推荐使用警告。因此,不应使用不建议使用的/不安全的Buffer构造函数。

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

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

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

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

yarn global add yarn

如此处所述:链接

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

注意:自我更新不可用。查看在项目中实施版本的策略

为了更新您的纱线版本,请运行

curl --compressed -o- -L https://yarnpkg.com/install.sh | bash

1
如果我的代码中没有任何新的Buffer()怎么办?我只在package-lock.json中找到它
Khaled Jamal

更新毛线的简单方法:legacy.yarnpkg.com/en/docs/cli/self-update
gkiely

0
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');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.