Chuyển đến nội dung chính

MỘT VÍ DỤ RÕ RÀNG HƠN VỀ ROUTE TRONG NODE.JS VÀ EXPRESS.



Trong phần mềm, phần định tuyến (route) là rất quan trọng bởi vì nó định nghĩa một URL để giao tiếp với ứng dụng.
Nếu nó không được tổ chức tốt thì về mặt logic là rất khó cho việc bảo trì sau này.         
Trong ví dụ này ta sử dụng express frameworks để xây dựng một cars API đơn giản.

GET /models
GET /models/:modelId
GET /models/:modelId/cars
GET /cars
GET /cars/:carId

Trước tiên ta tạo thư mục project có tên là: car-api và cài đặt các thư viện cho nó:

mkdir car-api
cd car-api
npm init -y
npm i -S express
npm i -D nodemon

Thêm phần start ứng dụng vào package.json

"start": "nodemon app.js"

Tạo một file JSON để lưu trữ dữ liệu API như dưới: 

{
  "models": [
    {
      "id": 1,
      "name": "Toyota"
    },
    {
      "id": 2,
      "name": "Mazda"
    }
  ],
  "cars": [
    {
      "id": 1,
      "name": "Corolla",
      "modelId": 1
    },
    {
      "id": 2,
      "name": "Mazda3",
      "modelId": 2
    },
    {
      "id": 3,
      "name": "Mazda6",
      "modelId": 2
    },
    {
      "id": 4,
      "name": "Miata",
      "modelId": 2
    },
    {
      "id": 5,
      "name": "Camry",
      "modelId": 1
    },
    {
      "id": 6,
      "name": "CX-9",
      "modelId": 2
    }
  ]
}

Tạo file app.js chính và add code cơ bản vào: 

// Bring in our dependencies
const app = require('express')();
const routes = require('./routes');

//  Connect all our routes to our application
app.use('/', routes);

// Turn on that server!
app.listen(3000, () => {
  console.log('App listening on port 3000');
});

Ứng dụng chạy trên port 3000. Và route chính / đươc điểu khiển  bởi file trong folder : routes

Tạo file routes/index.js có nội dung như sau : 

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

routes.get('/', (req, res) => {
  res.status(200).json({ message: 'Connected!' });
});

module.exports = routes;

File trên là tạo một instance của Router và đặt nó trong biến có tên gọi là: routes 
Và khi một user truy cập vào đường dẫn chính / thì nó sẽ trả về thông điệp json : 

message: 'Connected!' 
}


Như API trên, giờ ta tạo route model /route/models/index.js như sau : 

const models = require('express').Router();
const all = require('./all');

models.get('/', all);

module.exports = models;

File trên ta route tất cả vào file all.js trên cùng thư mục của file index.js này. 
Tạo file /routes/models/all.js 

const data = require('../../data.json');

module.exports = (req, res) => {
  const models = data.models;

  res.status(200).json({ models });
};

File tren import data vào và gôm tất cả các models, trả về trong response. 
Thêm code vào file routes/index.js 

const models = require('./models');
routes.use('/models', models);

Sau đó thử truy cập vào: http://localhost:3000/models 


Bây giờ ta tạo một route tiếp theo mà ta có thể xem chỉ một model. Tạo file single.js trong /routes/models/single.js 

const data = require('../../data.json');

module.exports = (req, res) => {
  const modelId = req.params.modelId * 1;
  const model = data.models.find(m => m.id === modelId);

  res.status(200).json({ model });
}; 

 req.params.modelId * 1: là biến một string thành một interger

Ta thêm route vào /routes/models/index.js 

const single = require('./single');
models.get('/:modelId', single);

Xong, thử truy cập vào http://localhost:3000/models/2 


Giờ đến API /models/:modelsId/car

Thêm route car vào /routes/models/index.js 

const cars = require('./cars');
models.use('/:modelId/cars', cars);

Tạo file index.js /routes/models/cars/index.js 

const cars = require('express').Router({ mergeParams: true });
const all = require('./all');

cars.get('/', all);

module.exports = cars;

Bây giờ ta tạo file all.js /routes/models/cars/all.js 

const data = require('../../../data.json');

module.exports = (req, res) => {
  const modelId = req.params.modelId * 1;
  const cars = data.cars.filter(c => c.modelId === modelId);

  res.status(200).json({ cars });
};

Bây giờ ta thử truy cập vào http://localhost:3000/models/1/cars


Giờ tạo API cars /cars 

thêm route vào file index.js /routes/index.js 

const cars = require('./cars');
routes.use('/cars', cars);

Tương tự như trên tao tạo file index.js trong /routes/index.js 

const cars = require('express').Router();
const all = require('./all');
const single = require('./single');

cars.get('/', all);
cars.get('/:carId', single);

module.exports = cars;

Sau đó tạo 2 file all.js và single.js trong routes/cars

const data = require('../../data.json');

module.exports = (req, res) => {
  const cars = data.cars;

  res.status(200).json({ cars });
};

và file single.js 

const data = require('../../data.json');

module.exports = (req, res) => {
  const carId = req.params.carId * 1;
  const car = data.cars.find(c => c.id === carId);

  res.status(200).json({ car });
};


Thử truy cập vào : http://localhost:3000/cars và http://localhost:3000/cars/3



và 


Bây giờ ta thử truy cập vào http://localhost:3000/models/200 sẽ ra trang lỗi, ta redirect qua lỗi 404 thì làm như sau: 

Thêm vào routes/models/index.js 


const data = require('../../data.json');

models.param('modelId', (req, res, next, value) => {
  const model = data.models.find(m => m.id === (value * 1));

  if (model) {
    req['model'] = model;
    next();
  } else {
    res.status(404).send('Invalid model ID');
  }
});

Chi tiết liên hệ : http://manageitservice247.com

Nhận xét

Bài đăng phổ biến từ blog này

Cách sử dụng sys.argv trong python.

Cách sử dụng sys.argv trong python.

sys.argv là môt danh sách [list] trong python, nó được sư dụng khi bạn chạy một lệnh command-line nào đó trên hệ thống.
Và argument này được đẩy vào script python để thực thi khi chạy câu lệnh.

Ví dụ: python sys.argv arg1 arg2

Trước tiên bạn phải import mô đun sys trong script.



import sys print"This is the name of the script: ", sys.argv[0]print"Number of arguments: ", len(sys.argv)print"The arguments are: ", str(sys.argv)

Tên của script này : sysargv.py
Số lượng arg là : 1
Arg là : ['sysargv.py']


python test1020.py 111 This is the name of the script:  test1020.py
Number of arguments:  2
The arguments are:  ['test1020.py', '111']

Thiết kế một RESTful API bằng python và flask.

Như các bạn đã biết thì REST viết tắt bởi REpresentational State Transfer. Bạn có thể tham khảo thêm ở đây.

Vậy REST là gì:

Có 6 yếu tố của REST như sau:

1. Client-Server: phía server side phục vụ như một service còn phía client sẽ dùng service này.

2.Stateless:  Mỗi request từ client phải chứa tất cả các thông tin mà phía server yêu cầu phải có. Nói nôm na là mỗi request chứa các thông tin riêng rẽ không liên quan đến những request khác.

3. Cacheable : Phía server side phải cảnh báo chỉ ra cho client side biết là request đó có cache hay không.

4. Hệ thống phân lớp: Giao tiếp giữa server side và client side có thể thông qua lớp trung gian ở giữa để trả lời các request được gọi mà không cân phía client phải làm những động tác khác nữa.

5. Các cổng giao tiếp là giống nhau : Các phương thức giao tiếp giữa client và server là khuôn mẫu giống nhau.

6. Mã code linh động. Phía server có thể thực thi cho môt API gọi duy nhất mà không ảnh hưởng tới các API khác.

RESTful web service là gì :

Kiế…

Cài đặt docker trên windows server 2016.

1. Cài đặt Windows Server 2016 Container Feature:  Mở PowerShell : Cài đặt các container feature dùng powershell: Dùng lệnh: InstallWindowsFeature containers Restart lại windows: 2. Cài đặt windows server 2016 base image:  Cài đặt mô đun : ContainerImage Dùng lệnh: Install-PackageProvider ContainerImage -force List các image có giá trị: Cài đặt Windows Server Core : 3. Cài đặt docker trên windows server 2016. Download script để cài đặt docker : Chạy script : Kiểm tra các image có trên server :