Hướng dẫn body-parser nodejs
Khi lần đầu học Express, tôi đã có file app.get(\'/\', function(req, res) { // get posts res.json(posts) }); Nhưng sau đó, tôi đã thử setup một project Nodejs với Express từ đầu và đã cố tạo routes giống như sau app.post(\'/\', function(req, res) { Post.create(req.body) }); nhưng nó đã không làm việc. Và errors thông báo nói về Điều
tiếp theo tôi đã làm là cố gắng kiểm tra Cuối cùng, tôi đã tìm đến
Nhưng tôi vẫn không thực sự hiểu tại nó hoạt động như thế nào. app.use()Trước tiên để sử dụng app.use(bodyParser.json()); Để hiểu cách thức hoạt động trên, bạn phải hiểu cách middleware hoạt động trong Express. Cụ thể, khi app.use(function(req, res) { // make somethings });
Đối lập với khi app.use(\'/test\', cb); Nó sẽ chỉ match với request bắt đầu với
var cb = bodyParser.json(); app.use(cb); Data form trong req objectThông tin được gửi qua internet qua các gói tin. Trong Nodejs, req.on(\'data\', function(chunk) { // here\'s the chunk }); Mỗi lần một đoạn của dữ liệu đến, bạn có thể sử dụng nó. Ví dụ một chuỗi như sau abcdefghijklmnopqrstuvwxyz cũng có thể là 5 đoạn abcde fghij klmno pqrst uvwxyz và bạn có khả năng truy cập mỗi đoạn dữ liệu. Như vậy dữ liệu POST sẽ không có sẵn trên đối tượng app.use(function( req, res, next ) { var data = \'\'; req.on(\'data\', function( chunk ) { data += chunk; }); req.on(\'end\', function() { req.rawBody = data; console.log( \'on end: \', data ) if (data && data.indexOf(\'{\') > -1 ) { req.body = JSON.parse(data); } next(); }); });
Nhưng có một số lưu ý. Về cơ bản, có nhiều cách khác nhau để định dạng dữ liệu bạn POST đến server:
Nói tóm lại, bodyParser phải phân tích dữ liệu một cách khác nhau tùy thuộc vào loại của nó. // for parsing application/json app.use(bodyParser.json()); // for parsing application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: true })); // for parsing multipart/form-data app.use(multer()); Với việc sử dụng Tác giả: Bui Xuan Hien 1. Mở đầuLần đầu tìm hiểu về Nodejs, tôi có thử tạo một project với mục đích gửi form và có đoạn code như sau:
Nhưng lỗi trả về là không tìm thấy req.body. Tôi đã thử kiểm tra req nhưng rất khó để có thể lấy được dữ liệu tôi đã gửi lên. Sau khi tìm hiểu, tôi đã biết tới body-parser 2. Cài đặtNhững library liên quan
3. DemoChúng ta hãy cùng xem ví dụ sau: Cho nhập vào một message, hiển thị message và thời điểm ghi ra message đó. Mặc dù là demo nhỏ nhưng tôi muốn hướng dẫn cụ thể hơn một chút cho những bạn mới tìm hiểu Nodejs như tôi
Cài đặt module
File package.json sau khi được tạo theo cách trên có thể có nội dung khác như bên dưới nhưng đừng bận tâm.
Trong cùng thư mục với package.json tạo một file app.js với nội dung:
Hãy để ý câu lệnh sau app.use(bodyParser.urlencoded({ extended: false })) . Nó mang ý nghĩa là một đối tượng body chứa dữ liệu mà đã được parsed sẽ được đưa vào request (có thể hiểu là req.body). Dữ liệu đó là một cặp key-value, trong đó value có thể là array hoặc string nếu extended: false và các loại còn lại nếu extended: true. Ngoài ra, module body-parser cung cấp những parsers nổi bật như sau:
Tiếp tục trong cùng thư mục với package.json tạo một file router.js với nội dung:
Trong cùng thư mục với package.json tạo một folder views, trong folder views đó tạo một file index.ejs với nội dung:
Chạy câu lệnh
và truy cập http://localhost:3000/ sẽ hiển thị như sau: Khi nhập message và nhấn send, ta có kết quả: Qua bài viết này, tôi muốn giới thiệu cho các bạn một trong những cách sử dụng module Body-Parser để xử lý form nhập vào. Tôi mới tìm hiểu về Nodejs và các module hay sử dụng, vì vậy nội dung bài viết có thể còn chưa rõ ràng và nhầm lẫn, mong nhận được sự góp ý của các bạn. Xin cảm ơn. https://github.com/expressjs/body-parser https://qiita.com/atlansien/items/2dad964467874b846f04 https://noumenon-th.net/programming/2018/12/17/bodyparser01/ |