Lập trình Web 2

Bài giảng 3 - Express.js

Giảng viên: Đỗ Nguyên Kha
Học kỳ 2/2018-2019 @ FIT-HCMUS

[Bản in]

Nội dung

  1. Routing
  2. Template
  3. Middleware
  4. Cấu trúc ứng dụng
  5. Xử lý lỗi
  6. Bài tập

Seminar

  • Điểm cộng tối đa 1 điểm
  • Tìm hiểu về các node.js framework: MEAN, Meteor, Sail, Nest, Loopback (API)...
  • Làm theo nhóm
  • Trình bày ngày 27/03/2019

Đăng ký nhóm

Sử dụng


						npm install --save express
						# hoặc
						yarn add express
					

						const express = require('express');
						const app = express();
						const port = 3000;

						app.get('/', (req, res) => res.send('Hello World!'));

						app.listen(port, () => console.log(`Example app listening on port ${port}!`));
					

Routing


						app.get();
						app.post();
						app.delete();
						app.put();
					

Template


						npm install pug --save
						# hoặc
						npm install ejs --save
					

						app.set('views', './views');

						app.set('view engine', 'pug');
						// hoặc
						app.set('view engine', 'ejs');
					

Session (với Redis)


						npm install express-session
						# hoặc cookie session
						npm install cookie-session

						npm install connect-redis
					

						const session = require('express-session');
						const RedisStore = require('connect-redis')(session);

						app.use(session({
							store: new RedisStore(options),
							secret: 'keyboard cat',
							resave: false
						}));
					

Bài tập về nhà - BTCN03

  • Xây dựng trang Web lưu những việc cần làm (TODO app) sau khi đăng nhập với username là MSSV của bạn và mật khẩu là kocopass
  • Lưu TODO trong session
  • Nộp link trang Web trên Heroku trong tập tin url.txt và mã nguồn
  • Nộp bài trên Web môn học trước 12/03/2019 09:00PM
  • Tên file: MSSV-xx.zip/rar, xx là điểm tự đánh giá từ 01-10. Ví dụ: 1515151-07.zip

Middleware


						function handler(req, res, next) {

						}

						app.use(handler);
						app.use('/path', handler);
					

Promise/Async/Await


						# hàm async trả về Promise
						async function doSomething() {
							const result = await doSomethingElse();
							return result.foo;
						}
					

Router


						const express = require('express');
						const router = express.Router();

						router.get('/', function (req, res) {
							res.send('Birds home page');
						});
					

Promise Router


						npm install express-promise-router
					

						const Router = require('express-promise-router');
						const router = Router();

						router.get('/', async function (req, res) {
							const data = await getSomethingFromDatabase();
							res.render('page', data);
						});
					

Xử lý lỗi


						app.use(function (err, req, res, next) {
							console.error(err.stack)
							res.status(500).send('Something broke!')
						});
					

Upload file


						npm install --save multer
					

						const multer  = require('multer');
						const upload = multer({ dest: 'uploads/' });

						app.post('/profile', upload.single('avatar'), function (req, res, next) {
							// req.file is the `avatar` file
							// req.body will hold the text fields, if there were any
						});
					

Database


						npm install sequelize
						npm install --save pg pg-hstore