DeprecationWarning: Buffer () устарел из-за проблем с безопасностью и удобством использования, когда я перемещаю свой скрипт на другой сервер

132

Ошибка при переносе скрипта на другой сервер.

(узел: 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
Хемадри Дасари
4
Это не ошибка, это предупреждение о том, что этот метод создания буфера устарел: nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding
stdob

Ответы:

318
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

Обратите внимание, что Buffer.alloc () также работает быстрее в текущих версиях Node.js, чем новый Buffer (size) .fill (0), что в противном случае необходимо для обеспечения нулевого заполнения.

Небойша Сапич
источник
3
что, если в моем коде нет нового Buffer ()? Он у меня только в package-lock.json?
Халед Джамал
@KhaledJamal, что именно у вас в package-lock.json?
Nebojsa Sapic
2
@NebojsaSapic после отслеживания проблемы я понял, что server.js использует его после того, как я добавил angular universal в свой проект, я считаю, что это потому, что я не использую последнюю версию It.
Khaled Jamal
@KhaledJamal благодарит за то, что поднял вашу проблему, и заархивировал ее для публикации, если у кого-то такая же проблема
Небойша Сапич
Я также вижу ту же проблему, что и @KhaledJamal, когда я преобразовал свой проект angular в рендеринг на стороне сервера, добавив angular universal.
user2869612
16

Использование устаревшего new Buffer()конструктора (iE, используемого Yarn) может вызывать предупреждения об устаревании. Поэтому НЕ следует использовать устаревший / небезопасный конструктор Buffer.

В соответствии с предупреждением об устаревании new Buffer()следует заменить на одно из:

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

Другой способ избежать этой проблемы - использовать вместо этого пакет safe-buffer.

Вы также можете попробовать (при использовании пряжи ..):

yarn global add yarn

как упоминалось здесь: Ссылка

Еще одно предложение из комментариев (спасибо gkiely): самообновление

Примечание: самообновление недоступно. См. Политики для принудительного применения версий в проекте

Чтобы обновить свою версию Yarn, запустите

curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
iLuvLogix
источник
1
что, если в моем коде нет нового Buffer ()? У меня он есть только в package-lock.json
Халед Джамал
Простой способ обновить пряжу: legacy.yarnpkg.com/en/docs/cli/self-update
gkiely
1
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');
Вибхор Дубе
источник