bodyParser không dùng nữa


398

Tôi đang sử dụng express 4.0 và tôi biết rằng trình phân tích cú pháp cơ thể đã được đưa ra khỏi lõi express, tôi đang sử dụng thay thế được đề xuất, tuy nhiên tôi đang nhận được

body-parser deprecated bodyParser: use individual json/urlencoded middlewares server.js:15:12 body-parser deprecated urlencoded: explicitly specify "extended: true" for extended parsing node_modules/body-parser/index.js:74:29

Tôi tìm thấy phần mềm trung gian này ở đâu? hoặc tôi không nên nhận được lỗi này?

var express     = require('express');
var server      = express();
var bodyParser  = require('body-parser');
var mongoose    = require('mongoose');
var passport    = require('./config/passport');
var routes      = require('./routes');

mongoose.connect('mongodb://localhost/myapp', function(err) {
    if(err) throw err;
});

server.set('view engine', 'jade');
server.set('views', __dirname + '/views');

server.use(bodyParser()); 
server.use(passport.initialize());

// Application Level Routes
routes(server, passport);

server.use(express.static(__dirname + '/public'));

server.listen(3000);

Câu trả lời:


730

Điều đó có nghĩa là việc sử dụng hàm bodyParser() tạo đã không được chấp nhận , kể từ 2014-06-19.

app.use(bodyParser()); //Now deprecated

Bây giờ bạn cần gọi các phương thức riêng biệt

app.use(bodyParser.urlencoded());

app.use(bodyParser.json());

Và như thế.

Nếu bạn vẫn nhận được cảnh báo với urlencodedbạn cần sử dụng

app.use(bodyParser.urlencoded({
  extended: true
}));

Khóa extendedđối tượng cấu hình bây giờ cần phải được thông qua rõ ràng, vì bây giờ nó không có giá trị mặc định.

Nếu bạn đang sử dụng Express> = 4.16.0, trình phân tích cú pháp cơ thể đã được thêm lại theo các phương thức express.json()express.urlencoded().


1
@eslam ultraafa Bạn có thể sử dụng bodyparser, bạn không thể gọi hàm tạo. Bạn cần gọi từng phương thức riêng lẻ.
Ben Fortune

2
@BenFortune cảm ơn Ben, tôi hiểu rồi -bodyparser-with-express-js.html tôi sẽ sử dụng ghê gớm sau đó cho các hình thức nhiều phần.
schehata

23
Không gì extendedlàm gì?
Camilo Martin

1
một lời giải thích về sự khác biệt sẽ hữu ích. Tôi cũng thấy dưới đây rằng bạn chỉ có thể sử dụng cả hai. Nhưng tại sao? Bạn nên cân nhắc điều gì?
Harry Moreno

8
Cách tốt nhất tôi giải thích mở rộng đúng là không sử dụng phương tiện mở rộng đó curl --data "user[email]=foo&user[password]=bar" localhost:3000/login sẽ được nhận bởi máy chủ trong req.bodykhi { user[email]: "foo", ...}ngược lại req.bodysẽ {user: {email: "foo", ... }}extended: true.
reed_de_la_mer

156

Muốn cảnh báo bằng không ? Sử dụng nó như thế này:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));

Giải thích : Giá trị mặc định của extendedtùy chọn đã không được chấp nhận, có nghĩa là bạn cần chuyển rõ ràng giá trị đúng hoặc sai.


1
Tôi sử dụng cái này, vẫn nhận được thông báo "body-Parser deprecated". app.use(bodyParser.json()).use(bodyParser.urlencoded({ extended: true }));
Jeremy Thille

6
Đó không phải là cách nó sẽ hoạt động. Bạn cần sử dụng app.use () riêng cho json và urlencoding
mr-karan

14

Trong các phiên bản cũ hơn của express, chúng tôi đã phải sử dụng:

app.use(express.bodyparser()); 

bởi vì trình phân tích cú pháp cơ thể là một phần mềm trung gian giữa nút và express. Bây giờ chúng ta phải sử dụng nó như:

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

Tôi nghĩ bạn muốn nói "body-Parser là middleware"? express không phải là phần mềm trung gian như tôi hiểu
sakhunzai

9

Nếu bạn đang sử dụng express> 4.16, bạn có thể sử dụng express.json()express.urlencoded()

Phần mềm trung gian express.json()express.urlencoded()đã được thêm vào để cung cấp hỗ trợ phân tích cú pháp thân yêu cầu. Điều này sử dụng expressjs/body-parsermô-đun mô-đun bên dưới, vì vậy các ứng dụng hiện đang yêu cầu mô-đun riêng biệt có thể chuyển sang trình phân tích cú pháp tích hợp.

Nguồn Express 4.16.0 - Ngày phát hành: 2017-09-28

Với cái này,

const bodyParser  = require('body-parser');

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

trở thành

const express = require('express');

app.use(express.urlencoded({ extended: true }));
app.use(express.json());

8

body-Parser là một phần của phần mềm trung gian cấp tốc đọc đầu vào của biểu mẫu và lưu trữ dưới dạng đối tượng javascript có thể truy cập thông qua req.body 'body-Parser' phải được cài đặt (thông qua npm install --save body-parser) Để biết thêm thông tin, hãy xem: https://github.com/expressjs/body -parser

   var bodyParser = require('body-parser');
   app.use(bodyParser.json()); // support json encoded bodies
   app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies

Khi extendedđược đặt thành đúng, thì các phần thân bị xì hơi (bị nén) sẽ bị thổi phồng; khi extendedđược đặt thành false, các cơ quan xì hơi bị từ chối.


2

Ý kiến ​​của bạn khi sử dụng trình tạo nhanh là gì, nó sẽ tạo dự án bộ xương để bắt đầu, without deprecated messagesxuất hiện trong nhật ký của bạn

chạy lệnh này

npm install express-generator -g

Bây giờ, tạo ứng dụng khởi động Express.js mới bằng cách nhập lệnh này vào your Node projects folder.

express node-express-app

Lệnh đó báo express để tạo ứng dụng Node.js mới với tên node-express-app.

sau đó Go to the newly created project directory, install npm packagesstart the appsử dụng lệnh

cd node-express-app && npm install && npm start

1

Tôi thấy rằng trong khi thêm

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));

giúp, đôi khi đó là vấn đề truy vấn của bạn xác định cách thức xử lý nhanh.

Chẳng hạn, có thể là các tham số của bạn được truyền vào URL chứ không phải trong phần thân

Trong trường hợp như vậy, bạn cần nắm bắt cả tham số thânurl và sử dụng tùy chọn nào có sẵn (với ưu tiên cho các tham số thân trong trường hợp bên dưới)

app.route('/echo')
    .all((req,res)=>{
        let pars = (Object.keys(req.body).length > 0)?req.body:req.query;
        res.send(pars);
    });

-1

app.use(bodyParser.urlencoded({extended: true}));

Tôi có cùng một vấn đề nhưng công việc này đối với tôi. Bạn có thể thử phần mở rộng này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.