Giải thích về Serverless bạn đọc bài trước có đăng
Nếu bạn chỉ có một trang blog như thế này, viết bằng Gatsby, không có backend làm sao bạn có thể có được tính năng cho phép user đăng ký nhận bản tin? Ví dụ dùng dịch vụ của MailChimp đi.
Chúng ta ko thể đưa API key vào trang frontend được, hiển nhiên quá mà! Ai cũng có thể lấy được cái key này thì sao.
Chúng ta phải thông qua một bên ở giữa, là Lambda function trên Netlify, chúng ta đưa key này cho Netlify, nó sẽ có trách nhiệm bảo mật key này và truyền thông tin tới MailChimp
Chữ Lambda được phát minh đầu tiên bởi Amazon AWS, sau này Netlify cũng dùng luôn tên này, nó là kiểu các hàm trung gian, giúp chúng ta giao tiếp với phía server (vì đây là dạng serverless, chúng ta dùng dịch vụ của nó cung cấp, giống như vua chúa, nếu muốn giao tiếp với anh thì chú cứ thông qua thái dám, họ sẽ truyền tin tới cho anh)
Cứ dùng trang mặc định của Gatsby
Tạo một thư mục bên trong source code, nó sẽ chứa toàn bộ các hàm sẽ giao tiếp với Lambda. Thư mục này đặt đâu cũng được, cứ đặt vào dưới thư mục gốc tên functions
context: function này được call ở đâu, thông tin user hiện tại
callback: hàm callback thôi, hàm này nhận param đâu tiền là error nếu có lỗi
Chạy các function Lambda ở local
Cần cài netlify-lambda để chạy test dưới local
npm install netlify-lambda
netlify-lambda serve <functions_directory>
<functions_directory> là thư mục chứa mấy function chúng ta viết
Thêm đoạn shortcut vào trong package.json để chạy lệnh này
Bước cuối cùng cần làm, tạo file config để báo với Netlify, đây không phải là thư mục chứa source code của chúng ta, đây là thư mục sau khi build. Tạo file Netlify.toml trong thư mục gốc
Sau khi build, file bên trong functions sẽ được đưa vào thư mục tên lambda
Chạy lại đoạn script shortcut hồi nãy khai báo npm run start:lambda, bên dưới hình này đoạn chạy bị lỗi là khi chưa tạo file Netlify.toml, chúng ta bắt buộc phải tạo file này trước khi chạy
Mở Postman lên gọi test thử
Function đầu tiên đã chạy thành công!!!
Chúng ta truyền thêm một object { "name" : "James" }, và muốn nhận được một JSON object thay vì là một string. Muốn vậy trong phần body chúng ta phải gọi JSON.stringify
callback(null, {
statusCode: 200,
body: JSON.stringify({ msg: "Thanks for visiting " + name })
});
// nếu không nhận được name= james
callback(new Error("You're not James"));
Nãy giờ chúng ta đang chạy các Lambda function ở dưới local bằng lệnh serve, để đưa lên Netlify, chúng ta cần build source code trước khi đẩy lên Netlify
Chúng ta phải setup chạy 2 script, một để build Gatsby, sau đó build mấy functions lambda
"props": "npm run build; npm run build:lambda"
Lưu ý: do đang dùng gatsby, nên cần 2 lệnh này, nếu bạn dùng một thằng khác, thì lệnh sẽ khác, tuy cách setup
Phải cập nhập lại Netlify.toml, chúng ta sẽ báo với Netlify: “Ê, khi nào tao chạy xong prop, thì mày deploy nhe”
Sau khi commit lên Github, Netlify sẽ bắt đầu trigger deploy, vào trang chính của Netlify, trong tab Deployment, bạn có theo dõi xem nó đang deploy tới đâu rồi
Sau khi deploy thành công, bạn có thể chuyển qua tab Function, các function nào đã có sẽ được liệt kê ở đây
Cơ bản là thế thôi, các bạn có thể làm “mọi thứ” với function mình viết (miễn là nó có cho), như gửi email, lưu dữ liệu xuống DB, gọi một API