DeprecationWarning: Buffer () tidak digunakan lagi karena masalah keamanan dan kegunaan ketika saya memindahkan skrip saya ke server lain

129

Mendapatkan kesalahan saat skrip dipindahkan ke server lain.

(node: 15707) [DEP0005] DeprecationWarning: Buffer () tidak digunakan lagi karena masalah keamanan dan kegunaan. Silakan gunakan metode Buffer.alloc (), Buffer.allocUnsafe (), atau Buffer.from () sebagai gantinya.

Versi Terkini:

Ubuntu 16.04.4 LTS  
Node - v10.9.0  
NPM - 6.2.0  

Versi sebelumnya:

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();
        }
    });

 }
Devendra Chauhan
sumber
1
Apakah Anda memeriksa utas ini? github.com/yarnpkg/yarn/issues/5770
Hemadri Dasari
4
Ini bukan kesalahan, ini adalah peringatan bahwa metode pembuatan buffer ini tidak digunakan lagi: nodejs.org/api/buffer.html#buffer_new_buffer_string_encoding
stdob--

Jawaban:

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

Perhatikan bahwa Buffer.alloc () juga lebih cepat pada versi Node.js saat ini daripada Buffer baru (size) .fill (0), yang seharusnya Anda perlukan untuk memastikan pengisian nol.

Nebojsa Sapic
sumber
3
bagaimana jika saya tidak memiliki Buffer () baru di kode saya? Saya hanya memilikinya di package-lock.json?
Khaled Jamal
@KaledJamal apa sebenarnya yang Anda miliki di package-lock.json?
Nebojsa Sapic
2
@NebojsaSapic setelah menelusuri masalah, saya menemukan bahwa server.js menggunakannya setelah saya menambahkan sudut universal ke proyek saya, saya percaya itu karena saya tidak menggunakan versi terbaru dari itu.
Khaled Jamal
@HaledJamal terima kasih telah mengangkat masalah Anda dan telah mengarsipkan untuk posting jika seseorang berbagi masalah yang sama
Nebojsa Sapic
Saya juga melihat masalah yang sama dengan @KaledJamal ketika saya mengubah proyek sudut saya menjadi rendering sisi server dengan menambahkan sudut universal.
pengguna2869612
16

Penggunaan new Buffer()konstruktor yang tidak digunakan lagi (iE seperti yang digunakan oleh Yarn) dapat menyebabkan peringatan penghentian. Oleh karena itu, Anda TIDAK boleh menggunakan konstruktor Buffer yang tidak digunakan lagi / tidak aman.

Menurut peringatan penghentian new Buffer()harus diganti dengan salah satu dari:

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

Pilihan lain untuk menghindari masalah ini adalah menggunakan paket safe-buffer.

Anda juga dapat mencoba (saat menggunakan benang ..):

yarn global add yarn

seperti yang disebutkan di sini: Tautan

Saran lain dari komentar (thx to gkiely): pembaruan sendiri

Catatan: pembaruan mandiri tidak tersedia. Lihat kebijakan untuk menerapkan versi dalam sebuah proyek

Untuk memperbarui versi Yarn Anda, jalankan

curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
iLuvLogix
sumber
1
bagaimana jika saya tidak memiliki Buffer () baru di kode saya? Saya hanya memilikinya di package-lock.json
Khaled Jamal
Cara mudah untuk memperbarui benang: legacy.yarnpkg.com/en/docs/cli/self-update
gkiely
1
var userPasswordString = new Buffer(baseAuth, 'base64').toString('ascii');

Ubah baris ini dari kode Anda menjadi ini -

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

atau dalam kasus saya, saya memberikan pengkodean dalam urutan terbalik

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