Posts

Tối ưu tốc độ ứng dụng Node.js khi lập trình

Image
JavaScript là ngôn ngữ dễ học. Node.js cũng dễ cài đặt. Module dùng sẵn trong Node.js thì sẵn. Node.js luôn được giới thiệu là một framework non-blocking I/O tốc độ xử lý rất nhanh. Tuy nhiên đã có lần  TJ Holowaychuk  , một lập trình viên trẻ,  tác giả và đồng tác giả  của rất nhiều Node.js module nổi tiếng như Express, KOA, vô cùng thất vọng mà viết bài  Farewell Node.js  gây xôn xao, chấn động giới lập trình Node.js. Mọi người trong đó có tôi e ngại, liệu Node.js có thể là một nền tảng ổn định để phát triển những ứng dụng nghiêm túc cho doanh nghiệp hay dịch vụ đám mây có tải lớn? Có quá nhiều module Node.js viết cẩu thả. Callback viết không cẩn thận là call back hell (lồng nhau nhiều cấp), Zalgo, gọi lại hai lần.... Đã có một thời kỳ Node.js được cập nhật một cách rất ỳ ạch (2013- 2014), tưởng như người ta đã rời bỏ Node.js ... Tuy nhiên ra phân tách hai tổ chức  nodejs.org  và  iojs.org  đã kích thích sự hồi phục vũ bão của Node.js. Trong bài viết này, tôi tập trung chi

Xác thực trong NodeJS sử dụng JSON Web Token

Image
1. Giới thiệu JSON web token Xác thực dựa trên token nổi bật khắp mọi nơi trên ứng dụng web ngày nay. Với hầu hết mọi ứng dụng web sử dụng API, token là cách tốt nhất để xử lý xác thực cho nhiều người dùng. Xác thực dựa trên token là stateless: không lưu trữ bất kỳ thông tin nào về user trên server hoặc trong session. JSON Web Token (JWT) là 1 tiêu chuẩn mở (RFC 7519) định nghĩa cách thức truyền tin an toàn giữa các thành viên bằng một đối tượng JSON. Thông tin này có thể được xác thực và đánh dấu tin cậy nhờ vào "chữ ký" của nó. Phần chữ ký của JWT sẽ được mã hóa lại bằng HMAC hoặc RSA. JSON Web Token bao gồm 3 phần, được ngăn cách nhau bởi dấu chấm (.): Header Payload Signature 2. Xây dựng ứng dụng xác thực sử dụng JSON web token Chúng ta sẽ xây dựng một API sử dụng Nodejs và Express. Workflow chính gồm: Ứng dụng có các routes yêu cầu xác thực và không yêu cầu xác thực User sẽ xác thực bằng cách gửi username, password và nhận về token User lưu trữ token

So sánh giữa Node.js và Golang

Gần đây, đã có những lời chỉ trích về giá trị của việc sử dụng Node.js trong một môi trường ứng dụng mạng hiệu suất cao, và một số nhà phát triển đã chuyển sang ngôn ngữ Go. Ngoài ra cũng có một số tập đoàn lớn chuyển sang sử dụng Go, ngoài tác giả của ngôn ngữ này là Google. Dropbox đã chuyển sang Go, họ tuyên bố rằng hiệu suất tăng lên đáng kể, và các nhà phát triển của hệ thống ảo hóa Docker cũng đang sử dụng Go. Tuy nhiên, điều quan trọng cần lưu ý là Node.js vẫn đang được sử dụng rộng rãi hơn nhiều, có nhiều module hơn, dễ dàng sử dụng hơn, và nó sẽ chẳng đi đâu cả trong thời gian sắp tới. Ngoài ra, nếu bạn đang làm một ứng dụng web, Node.js có thể là ngôn ngữ mà bạn lựa chọn, còn Go hiện tại được sử dụng nhiều như là một ngôn ngữ kịch bản tập trung ưu tiên vào ứng dụng đồng thời (concurrency) và tốc độ. Trong bài viết này, chúng ta sẽ có một cái nhìn vào sự khác biệt giữa Node.js và Go từ góc nhìn của nhà phát triển để phát hiện ra những điểm mạnh và điểm yếu của từng môi

Viết integration test Nodejs with jasmine

Trong 1 lần tìm hiểu viết integration test cho ứng dụng nodejs, mình thấy có khá nhiều framework để test. Trong số đó được nhiều lập trinh viên sử dùng là mocha và jasmine. Jasmine là 1 behavior-driven development framework test cho Javascript. Nó không phụ thuộc vào việc bạn sử dụng framework javascript nào. Không yêu cầu DOM và dễ dàng viết test. Hôm nay mình sẽ viết bài hướng dẫn sử dụng jasmine để viết test cho NodeJs. 1.Cài đặt Add Jasmine vào file package.json: npm install jasmine --save-dev Khởi tạo jasmine trong project: jasmine init Khi bạn muốn chạy test ta sẽ chạy: jasmine 2. Viết test Jasmine là 1 thư viện vì vậy trong file test bạn sẽ khai báo trên đầu file var Jasmine = require ( 'jasmine' ); var jasmine = Jasmine(); Chúng ta sẽ setup vài ví dụ đơn giản để test hàm get server để đảm bảo rằng server sẽ trả ra HTTP status là 200 (OK) à nội dung của body là "hello world". Viết test bao gồm  describe  để miêu tả nội dung test giúp cho