DeprecationWarning:スクリプトを別のサーバーに移動するときのセキュリティと使いやすさの問題のため、Buffer()は廃止されました


129

スクリプトが他のサーバーに移動するとエラーが発生します。

(node: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

4
これはエラーではありません。バッファを作成するこのメソッドが廃止されているという警告です:nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding
stdob--

回答:


313
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(size).fill(0)よりもBuffer.alloc()の方が高速であることに注意しください


3
コードに新しいBuffer()がない場合はどうなりますか?私はpackage-lock.jsonにそれを持っていますか?
Khaled Jamal

@KhaledJamal package-lock.jsonに正確に何がありますか?
Nebojsa Sapic

2
@NebojsaSapic問題を追跡した後、プロジェクトにAngular Universalを追加した後、server.jsがそれを使用していたことがわかりました。最新バージョンのItを使用していないためです。
Khaled Jamal

@KhaledJamal問題を提起していただきありがとうございます。誰かが同じ問題を共有している場合は投稿用にアーカイブしてください
Nebojsa Sapic

また、角度ユニバーサルを追加して角度プロジェクトをサーバー側レンダリングに変換したときに、@ KhaledJamalと同じ問題が発生しています。
user2869612

16

非推奨のnew Buffer()コンストラクター(Yarnで使用されるiE)を使用すると、非推奨の警告が発生する可能性があります。したがって、推奨されない/安全でないBufferコンストラクタを使用しないでください。

非推奨によると、警告new Buffer()は次のいずれかに置き換える必要があります。

  • Buffer.alloc()
  • Buffer.allocUnsafe() または
  • Buffer.from()

この問題を回避するための別のオプションは、代わりにsafe-bufferパッケージを使用することです。

(yarnを使用する場合は)を試すこともできます。

yarn global add yarn

ここで述べたように:リンク

コメントからの別の提案(thxからgkiely):自己更新

注:自己更新は利用できません。参照ポリシーをプロジェクト内のバージョンを施行するため

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

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');
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.