Giáo trình môn học Phát triển mã nguồn mở với NodeJS (Ngànhnghề Thiết kế trang web)

72 25 0
Giáo trình môn học Phát triển mã nguồn mở với NodeJS (Ngànhnghề Thiết kế trang web)

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ỦY BAN NHÂN DÂN TỈNH LÂM ĐỒNG TRƯỜNG CAO ĐẲNG NGHỀ ĐÀ LẠT GIÁO TRÌNH MƠN HỌC/ MƠ ĐUN: PHÁT TRIỂN MÃ NGUỒN MỞ VỚI NODEJS NGÀNH/ NGHỀ: THIẾT KẾ TRANG WEB TRÌNH ĐỘ: CAO ĐẲNG Ban hành kèm theo Quyết định số: 1157/QĐ-CĐNĐL ngày 11 tháng 12 năm 2019 Hiệu trưởng Trường Cao đẳng Nghề Đà Lạt (LƯU HÀNH NỘI BỘ) Lâm Đồng, năm 2019 TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại sách giáo trình nên nguồn thơng tin phép dùng ngun trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm Giáo trình lưu hành nội Trường Cao đẳng Nghề Đà Lạt Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang LỜI GIỚI THIỆU Vài nét xuất xứ giáo trình: Giáo trình viết theo Thông tư số 03/2017/TT-BLĐTBXH ngày 01 tháng 03 năm 2017 Bộ Lao động – Thương binh Xã hội việc Quy định quy trình xây dựng, thẩm định ban hành chương trình; tổ chức biên soạn, lựa chọn, thẩm định giáo trình đào tạo trình độ trung cấp, trình độ cao đẳng Quá trình biên soạn: Giáo trình biên soạn có tham gia tích cực giáo viên có kinh nghiệm, với ý kiến đóng góp quý báu chuyên gia lĩnh vực công nghệ thông tin Mối quan hệ tài liệu với chương trình, mơ đun/mơn học: Căn vào chương trình đào tạo nghề Thiết kế trang web, giáo trình giúp cung cấp cho người học kiến thức lập trình NodeJS kỹ lập trình sở liệu MySQL ngôn ngữ NodeJS Để học mô đun người học cần có kiến thức HTML sở liệu Cấu trúc chung giáo trình bao gồm bài: Bài Tổng quan nodejs Bài Các Module NodeJS Bài Làm việc với MySQL Database Server NodeJS Bài Socket Lời cảm ơn Giáo trình biên soạn sở văn quy định Nhà nước tham khảo nhiều tài liệu liên quan có giá trị Song hẳn q trình biên soạn khơng tránh khỏi thiếu sót định Ban biên soạn mong muốn thực cảm ơn ý kiến nhận xét, đánh giá chuyên gia, thầy đóng góp cho việc chỉnh sửa để giáo trình ngày hoàn thiện Lâm Đồng, ngày 10 tháng 12 năm 2019 Tham gia biên soạn Phạm Đình Nam Ngơ Thiên Hồng Nguyễn Quỳnh Ngun Phan Ngọc Bảo Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang MỤC LỤC BÀI TỔNG QUAN VỀ NODEJS Giới thiệu NodeJS Thiết lập môi trường Module Node.js Tìm hiểu NPM Bài Các Module NodeJS 11 Module HTTP 11 1.1 Xây dựng máy chủ HTTP 11 1.2 Phân tích máy chủ HTTP 11 1.3 Truyền hàm cho máy chủ hoạt động 12 1.4 Phương thức writeHead 12 1.5 Phương thức write 12 1.6 Phương thức end 13 Làm việc với file Node.js 13 2.1 Đọc nội dung file 13 2.2 Ghi nội dung vào file 15 2.3 Xóa file 16 Module URL 17 3.1 Giới thiệu 17 3.2 Phân tích URL 18 Module Path 19 Event Emitter 24 5.1 Lập trình hướng kiện 24 5.2 EventEmitter 24 5.3 Xóa kiện 25 Đối tượng Global Process 25 6.1 Đối tượng Global Node.js 25 6.2 Đối tượng Process Node.js 26 Express Framework 26 7.1 Giới thiệu Express 26 7.2 Cài đặt sử dụng Express 27 7.3 Router Express Framework 28 7.3.1 Router gì? 28 7.3.2 Sử dụng Router 28 Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang 7.3.3 Tham số router 29 7.4 Template Engine Express 30 7.4.1 Template Engine ? 30 7.4.2 Danh sách loại template engine 30 7.4.3 Ưu điểm sử dụng Template Engine 30 7.4.4 Sử dụng Template Engine Express 30 7.4.5 Kết hợp EJS template với Express 31 7.5 Middleware Express 32 7.5.1 Middleware ứng dụng web 32 7.5.2 Middleware Express 32 7.5.3 Cấu trúc middleware express 33 7.5.4 Sử dụng middleware express 34 7.5.5 Truy cập file tĩnh express 38 7.5.6 Làm việc với Form express 41 Sử dụng cookies 44 8.1 Cài đặt cookie-parser 44 8.2 Sử dụng cookie-parser 44 8.3 Đặt thời gian sống cho cookie 45 8.4 Xóa cookie 46 Sử dụng session 46 9.1 Định nghĩa Session 46 9.2 Lý session đời 46 9.3 Phân biệt session trình duyệt khác 46 9.4 Sử dụng session node.js 47 Bài Làm việc với MySQL Database Server NodeJS 48 Kết nối với MySQL Database Server 48 1.1 Cài đặt package mysql cho Node.js 48 1.2 Kết nối với MySQL Database Server Node.js 48 1.3 Đóng kết nối sở liệu 49 Tạo bảng MySQL Node.js 49 Thêm liệu vào bảng từ Node.js 51 Truy vấn liệu CSDL MySQL từ Node.js 53 4.1 Thực thi câu truy vấn đơn giản 53 4.2 Chuyển liệu vào câu truy vấn 54 Cập nhật liệu sở liệu MySQL Node.js 54 Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang Xóa liệu MySQL từ Node.js 55 Bài Socket 57 Tổng quan Socket.io 57 Cài đặt Socket.IO 57 Xử lý kiện Socket.IO 60 3.1 Tổng quan module Events Node.js 60 3.2 Sử dụng module Events 61 3.3 Viết module khác kế thừa module Events 63 3.4 Phân biệt events với socket.io 65 Socket.IO Broadcasting 65 Socket.IO Namspace 68 Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang BÀI TỔNG QUAN VỀ NODEJS Giới thiệu NodeJS Mặc dù Nodejs đời năm 2009 nhiều chuyên gia lập trình quan tâm sử dụng rộng rãi tất lĩnh vực, chạy hầu hết hệ điều hành Đây tảng Server xây dựng dựa Javascript Engine Nếu bạn thực đam mê với lập trình web bạn nên học Nodejs, ngôn ngữ chiếm ưu tương lai Hiện xu hướng năm 2017 học lập trình Nodejs, hi vọng giáo trình video học lập trình Nodejs giúp ích bạn nhiều đường trở thành lập trình viên Thiết lập môi trường Các đoạn code node.js thực chất đoạn mã Javascript Node.js sử dung để thông dịch thực thi đoạn code Javascript Node.js phân phối dạng cài đặt cho hệ điều hành Linux, Mac OS X Windown với phiên 32 bit 64 bit Để cài đặt Node.js bạn truy cập vào kho lưu trữ Node.js tải xuống cài đặt phù hợp với hệ điều hành sử dụng Cài đặt Windows Tải tệp cài đặt với định dạng msi trang chủ download Node.js Chạy tệp cài đăt với định dạng msi mà bạn tiến hành tải xuống trước Làm theo hướng dẫn trình cài đặt Khởi động lại máy tính: Bạn chạy Node.js không khởi động lại máy tính sau cài đặt Cài đặt MacOs Tải tệp cài đặt với định dạng pkg trang chủ Node.Js Mở tệp cài đặt với định dạng pkg mà bạn vừa tải xuống Làm theo bước hướng dẫn cài đặt Cài đặt Linux Với máy chạy hệ điều hành Linux bạn cài đặt cách tải xuống giải nén tệp lưu trữ tar.gz , sau chuyển tệp giải nén vào thư mục /usr/local/nodejs Tải tệp lưu trữ tar.gz Tạo thư mục /usr/local/nodejs Để tạo thư mục bạn chạy command với lệnh sausudo mkdir -p /usr/local/nodejs giải nén tệp tar.gz mà bạn vừa tải để giải nén bạn vào thư mục dowload Node.js trước chạy command với lệnhtar xvfz filename.tar.gzVí dụ tơi tải phiên 10.13.0 với tên file node-v10.13.0.tar.gz Di chuyển file tất file vừa giải nén vào thư mục /usr/local/nodejs Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang Các bạn dùng command với lệnh sau để di chuyển file sudo mv node-v10.10.0/* /usr/local/nodejs Sau chạy xong lệnh để kiểm tra xem chuyển thành công nodejs vào /usr/local/nodejs hay chưa bạn chạy thêm lệnh sau cd /usr/local/nodejs ls Nếu thị danh dách file tức bạn di chuyển thành công Thêm biến môi trường node vào PATH Để thêm biến môi trường node vào PATH bạn chạy command với lệnh sauexport PATH=$PATH:/usr/local/nodejs/bin Kiểm tra Node.js Sau cài đặt xong để chắn Node.js cài đặt máy bạn Các bạn chạy lệnh command sau để kiểm tra node -v Module Node.js Khi bạn viết ứng dụng Node.js bạn đặt tất code bạn vào tệp đó, cho dù ứng dụng bạn có lớn hay phức tạp đến Trình thơng dịch nodejs khơng quan tâm đến vấn đề Nhưng mặt tổ chức code bạn khó khăn để quản lý đoạn code Vì vậy, thói quen bạn nên quan tâm nhiều cấu trúc code Đây lý mà module đưa vào Node.js Bạn nghĩ đơn giản module Node.js thư viện Javascript hay phần code bạn (ví dụ tập hợp hàm) mà bạn muốn giữ lại để tái sử dụng sau Ở Node.js bạn gặp loại Module Module tích hợp : loại module Node.js tích hợp sẵn cho bạn cài Node.js Các bạn xem danh sách module tích hợp sẵn Module bên ngoài: module chia sẻ từ lập trình viên khác giới thơng qua kho quản lý bên Cụ thể NPM Module tạo riêng bạn: Các module tích hợp module bên ngồi cung cấp người khác, bạn tạo module Node.js riêng bạn Tạo module bạn Ví dụ sau hướng dẫn bạn tự tao module myRandom cung cấp hàm trợ giúp trả số ngẫu nhiên từ đến 10 Trước tiên bạn tạo tệp Javascript Ở tạo tệp với tên myRandom.js Ở tệp myRandom.js bạn viết nội dung sau Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang function getRandom(min, max) { return Mapath.random() * (max - min) + min; } module.export.between1and10 = function() { return getRandom(1, 10); } Với tệp cung cấp bên cho module khác sử dụng thông qua module.exports Ở tạo tệp khác với tên index.js để sử dụng chức exports Tiếp theo bạn tạo thêm tệp để nhận chức exports bên myRandom.js Các bạn tạo tệp index.js thêm nội dung sau vào var myRandom = require('./myRandom'); console.log(myRandom.between1and10()) Ở bạn thấy tơi có dùng require để truy cập vào mã module myRandom mà vừa tạo Bây để kiểm tra Module vừa viết có hoạt động hay khơng có bạn vào thư mục chứa file index.js mà bạn vừa tạo chạy command với cú pháp node index Tìm hiểu NPM Ở trước tơi có nói tới dạng module node.js Module tích hợp, module bên ngồi module tự tạo Module tích hơp module có sẵn , module tự tạo tạo ra, module bên module lập trình viên khắp giới chia sẻ Vậy làm biết module chia sẻ đâu, sử dụng module Trong phần tìm hiểu cách sử dụng NPM để quản lý module bên ngồi NPM gì?  NPM từ viết tắt cụm từ (Node Package Manager)  NPM cung cấp cho chức sau: o Kho lưu trữ module trực tuyến cho Node.js o Tiện ích dịng lệnh (command) để cài đặt module, package Node.js quản lý phiên phụ thuộc package node.js Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang let mysql = require('mysql'); let config = require('./config.js'); let connection = mysql.createConnection(config); // Câu lệnh xóa let sql = `DELETE FROM todos WHERE id = ?`; // Xóa hàng với id = connection.query(sql, 1, (error, results, fields) => { if (error) return console.error(error.message); console.log('Deleted Row(s):', results.affectedRows); }); connection.end(); Trong ví dụ này, tơi sử dụng trình giữ chỗ (?) câu lệnh DELETE Khi gọi phương thức query() đối tượng connection để thực câu lệnh, chuyển liệu tới câu lệnh DELETE làm đối số thứ hai Trình giữ chỗ thay giá trị đầu vào, id lấy giá trị truy vấn thực DELETE FROM todos WHERE id = Lưu ý rằng, bạn có nhiều phần giữ chỗ, bạn cần truyền mảng tới truy vấn để chuyển liệu đến câu lệnh SQL Để lấy số hàng xóa, bạn truy cập thuộc tính affectedRows đối tượng results Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang 56 Bài Socket Tổng quan Socket.io  Socket.IO thư viện Javascript cho ứng dụng web realtime (web thời gian thực)  Nó cho phép giao tiếp hai chiều theo thời gian thực máy khách máy chủ web  Nó có hai phần client-side library hoạt động trình duyệt, server-side library cho node.js Ứng dụng thời gian thực Một ứng dụng thời gian thực (RealTime Application) ứng dụng hoạt động khoản thời gian mà người dùng cảm nhận thời Một số ví dụ cá ứng dụng thời gian thực  Instant messengers – Các ứng dụng chat, trò chuyện Whatsapp, Facebook Messenger, v.v Bạn khơng cần phải làm ứng dụng/website để nhận nội dung chat  Push Notifications – Khi tags bạn vào ảnh Facebook, ban nhận a thông báo  Collaboration Applications – Các ứng dụng Google docs, cho phép nhiều người cập nhật tài liệu lúc áp dụng thay đổi cho tất trường hợp người  Game Online – Các trò chơi Liên Minh Huyền Thoại, PUBG, Đột Kích, FIFA ONLINE v.v , số ví dụ ứng dụng thời gian thực Tại nên chọn Socket.IO  Socket.IO phổ biến, sử dụng bới Microsoft Office, Yammer, Zendesk, Trello nhiều tổ chức khác để xây dựng hệ thống thời gian thực mãnh mẽ  Nó framework Javascript mãnh mẽ Github, hầu hết phụ thuộc vào module NPM  Socket.IO có cộng đồng lớn, có nghĩa việc tìm kiếm giúp đỡ dễ dàng Cài đặt Socket.IO Trước cài đặt socket.IO bạn phải chắn thiết bị cài đặt Node.js NPM Để kiểm tra bạn chạy lệnh sau node version npm version Bạn nhận thông tin phiên node npm cài đặt Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang 57 Tiếp theo bạn tạo cho thư mục để lưu trữ ví dụ Ở tơi sử dụng thư mục socket.io-test đồng thời tạo file package.json thư mục lệnh npm init Bây cần phải cài đặt Express Socket.IO Để cài đặt chúng nhập lệnh sau vào command bạn thư mục gốc dự án npm install express socket.io Ứng dụng Hello World Tạo tệp với tên app.js đưa đoạn mã sau để thiết lập ứng dụng const express = require('express'); const app = express(); const server = require('http').Server(app); app.get('/', function(request, response){ response.sendFile( dirname + '/index.html'); }); server.listen(8000, function(){ console.log(`Lắng nghe cổng 8000`); }); Tiếp theo, tạo tệp index.html với nội dung sau { console.log(`New user saved: ${user.name} - ${user.occupation}`); }); // Lưu thêm thằng user let trungquandev04 = {id: 4, name: "Trungquandev04", occupation: "Code xịn (─‿‿─)"}; let trungquandev05 = {id: 5, name: "Trungquandev05", occupation: "Code lởm (-.-)"}; User.saveUser(trungquandev04); User.saveUser(trungquandev05); // Lấy toàn users Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang 64 let allUser = User.allUser(); console.log(allUser); Kết sau chạy: Như vậy, thấy, module UserModel sau kế thừa EventEmitter, tự phát tự lắng nghe kiện Cool huh? =)) 😀 3.4 Phân biệt events với socket.io Chắc có nhiều bạn làm quen với node.js nghe qua tên phổ biến socket.io để làm ứng dụng real-time Khi tìm hiểu Node.js cảm thấy chút mâu thuẫn thành phần events socket.io Cả module có chung điểm emit phát kiện on để lắng nghe kiện gửi – nhận tham số liệu từ chúng Điểm khác quan trọng thành phần là: Socket.io cho phép phát lắng nghe kiện qua lại client server Events cho phép phát lắng nghe kiện nội server Còn muốn sử dụng socket.io phát nhận kiện server ln có gói module khác socket.io-client Socket.IO Broadcasting Broadcasting nghĩa gửi tin nhắn đến tất người dùng kết nối Broadcasting thực nhiều cấp độ Chúng ta gửi tin nhắn đến tất người dùng kết nối, khách hàng có tên khách hàng phòng cụ thể Để phát kiện cho tất khách hàng, sử dụng phương thức io.sockets.emit nối Lưu ý: Thao tác phát kiện cho TẤT CẢ máy khách kết Trong ví dụ tơi phát kiện cho tất máy khách kết nối Thay đổi nội dung file app.js sau const express = require('express'); const app = express(); const server = require('http').Server(app); Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang 65 const io = require('socket.io')(server) app.get('/', function(request, response){ response.sendFile( dirname + '/index.html'); }); var clients = 0; io.on('connection', function(socket){ clients++; io.sockets.emit('broadcast', {description: `${clients} người dùng kết nối`}) socket.on('disconnect', function(){ clients ; io.sockets.emit('broadcast', {description: `${clients} người dùng kết nối`}) }) }); server.listen(8000, function(){ console.log(`Lắng nghe cổng 8000`); }); Về phía máy khách, tiến hành xử lý kiện broadcast File index.html Hello World Hello World Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang 66 var socket = io(); socket.on('broadcast', function(data){ document.write(data.description) }) Với ví dụ gửi tất kiện cho người Bây nếu, muốn gửi kiến tới người trừ máy khách gây kiện sử dụng socket.broadcast.emit Ví dụ đây, gửi cho người dùng vừa kết nối thông điệp chào mừng, cập nhật cho máy khách khách khác việc có người vừa kết nối Trong tệp app.js const express = require('express'); const app = express(); const server = require('http').Server(app); const io = require('socket.io')(server) app.get('/', function(request, response){ response.sendFile( dirname + '/index.html'); }); var clients = 0; io.on('connection', function(socket){ clients++; socket.emit('newclientconnect', {description: `Chào mừng bạn`}) socket.broadcast.emit('newclientconnect', {description: `${clients} người dùng kết nối`}) socket.on('disconnect', function(){ clients ; io.sockets.emit('broadcast', {description: `${clients} người dùng kết nối`}) }) }); server.listen(8000, function(){ console.log(`Lắng nghe cổng 8000`); }); Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang 67 Xử lý kiện client Hello World Hello World var socket = io(); socket.on('newclientconnect', function(data){ document.body.innerHTML = ''; document.write(data.description) }) Bây có người kết nối có thơng điệp chào mừng người kết nối trước nhận có người kết nối với máy chủ Socket.IO Namspace Socket.IO cho phép bạn tạo “namespace” riêng cho sockets bạn, có nghĩa gán điểm cuối đường dẫn khác Đây tính hữu ích để giảm thiểu số lượng tài nguyên (kết nối TCP) đồng thời mối quan tâm riêng biệt bạn ứng dụng cách giới thiệu khác biệt kênh Nhiều namspace thực chia sẻ kết nối Websockét tiết kiệm cho cổng máy chủ Namespace tạo phía máy chủ Tuy nhiên, chúng máy khách tham cách gửi yêu cầu đến máy chủ Namespace mặc định Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang 68 Namespace gốc „/‟ namespace mặc định, kết nối với máy khách namespace không định client kết nối với máy chủ Tất kết nối đến máy chủ sử dụng phía máy khách đối tượng socket thự cho namespace mặc định Ví dụ var socket = io(); Điều kết nối máy khách với namespace mặc định Tất kiện kết nối namespace xử lý đối tương io máy chủ Tất ví dụ trước sử dụng namespace mặc định để giao tiếp với máy chủ ngược lại Namespace tùy chỉnh Chúng ta tạo namespace tùy chỉnh riêng Để thiết lập namespace tùy chỉnh, gọi phương thức of phía máy chủ Thay đổi nội dung app.js sau const express = require('express'); const app = express(); const server = require('http').Server(app); const io = require('socket.io')(server) app.get('/', function(request, response){ response.sendFile( dirname + '/index.html'); }); var clients = 0; var namespace = io.of('/my-namespace') namespace.on('connection', function(socket){ console.log('Một người kết nối') namespace.emit('chao', 'Chào tất người') }); server.listen(8000, function(){ console.log(`Lắng nghe cổng 8000`); }); Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang 69 Tiếp theo để kết nối máy khách với namespace này, bạn cần cung cấp namespace làm tham số cho lời gọi hàm tạo io để tạo kết nối đối tượng socket phía máy khách Ví dụ để kết nối với namespace Cập nhật tệp index.html Hello World Hello World var socket = io('/my-namespace'); socket.on('chao', function(data){ document.body.innerHTML = ''; document.write(data) }) Mỗi có kết nối họ nhận kiện “chao” Phạm Đình Nam – Trường Cao đẳng nghề Đà Lạt Trang 70 ... Nếu bạn thực đam mê với lập trình web bạn nên học Nodejs, ngôn ngữ chiếm ưu tương lai Hiện xu hướng năm 2017 học lập trình Nodejs, hi vọng giáo trình video học lập trình Nodejs giúp ích bạn nhiều... kế trang web, giáo trình giúp cung cấp cho người học kiến thức lập trình NodeJS kỹ lập trình sở liệu MySQL ngôn ngữ NodeJS Để học mơ đun người học cần có kiến thức HTML sở liệu Cấu trúc chung giáo. .. Quy định quy trình xây dựng, thẩm định ban hành chương trình; tổ chức biên soạn, lựa chọn, thẩm định giáo trình đào tạo trình độ trung cấp, trình độ cao đẳng Quá trình biên soạn: Giáo trình biên

Ngày đăng: 30/10/2021, 05:34

Tài liệu cùng người dùng

Tài liệu liên quan