NodeJS

运行在服务端的JS

介绍

  1. 跨平台
  2. 事件驱动
  3. 异步I/O

接口规范

  1. RESTful
    • URL地址中仅包含名词(定义资源,单一路径)
    • 使用HTTP动词(操作资源,请求类型)
  2. limit
    • 返回记录的数量
  3. offset
    • 返回记录的开始位置
  4. page
    • 页数
  5. per_page
    • 每页的记录数
  6. sortby
    • 返回的结果按照哪个属性进行排序
  7. order
    • 排序顺序
  8. state
    • 筛选条件

代码示例:

<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8">
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <div>
      <div>用户名:<input type="text" id="username"></div>
      <div>密码:<input type="password" id="pwd"></div>
      <div>年龄:<input type="number" id="age"></div>
      <div><button id="register">注册</button></div>
    </div>
    <div>
      <button id="update">更新</button>
      <button id="delete">删除</button>
    </div>
    <table>
      <thead>
      <tr>
        <td>id</td>
        <td>用户名</td>
        <td>年龄</td>
      </tr>
      </thead>
      <tbody>

      </tbody>
    </table>
    <script>
      const register = document.querySelector('#register')
      const username = document.querySelector('#username')
      const pwd = document.querySelector('#pwd')
      const age = document.querySelector('#age')
      const update = document.querySelector('#update')
      const deleteButton = document.querySelector('#delete')
      register.onclick = () => {
        fetch('/api/user', {
          method: 'POST',
          body: JSON.stringify({
            username: username.value,
            pwd: pwd.value,
            age: age.value
          }),
          headers: {
            'Content-Type': 'application/json'
          }
        })
                .then(res => res.json())
                .then(res => {
                  console.log(res)
                })
                .catch(err => console.log(err))
      }
      deleteButton.onclick = () => {
        fetch('/api/user/6317decdeb469ce9190d8c5c', {
          method: 'DELETE'
        })
                .then(res => res.json())
                .then(res => {
                  console.log(res)
                })
                .catch(err => console.log(err))
      }
      update.onclick = () => {
        fetch('/api/user/6317decdeb469ce9190d8c5c', {
          method: 'PUT',
          body: JSON.stringify({
            username: 'username',
            pwd: 'password',
            age: 24
          }),
          headers: {
            'Content-Type': 'application/json'
          }
        })
                .then(res => res.json())
                .then(res => {
                  console.log(res)
                })
                .catch(err => console.log(err))
      }
      fetch('/api/user?page=1&limit=2')
              .then(res => res.json())
              .then(res => {
                const tbody = document.querySelector('tbody')
                tbody.innerHTML = res.map(item => `
                <tr>
                    <td>${item._id}</td>
                    <td>${item.username}</td>
                    <td>${item.age}</td>
                </tr>
                `).join('')
              })
              .catch(err => console.log(err))
    </script>
  </body>
</html>
var express = require('express');
var router = express.Router();

const UserModel = require('../model/UserModel')

router.post('/user', (req, res) => {
    const {username, pwd, age} = req.body
    UserModel.create({
        username,
        pwd,
        age
    })
        .then(data => {
            res.send({ok: 1})
        })
        .catch(err => console.log(err))
})

router.put('/user/:id', (req, res) => {
    const {username, pwd, age} = req.body
    UserModel.updateOne({_id: req.params.id}, {
        username,
        pwd,
        age
    }).then(data => {
        res.send({ok: 1})
    }).catch(err => console.log(err))
})

router.delete('/user/:id', (req, res) => {
    UserModel.deleteOne({_id: req.params.id}).then(data => {
        res.send({ok: 1})
    }).catch(err => console.log(err))
})

router.get('/user', (req, res) => {
    const {page, limit} = req.query
    UserModel.find({}, ['username', 'age'])
        .sort({age: 1})
        .skip((page - 1) * limit)
        .limit(limit)
        .then(data => {
            res.send(data)
        })
})

module.exports = router;

业务分层

  1. Router
    • 请求分发给C层
  2. Controller
    • 处理业务逻辑
  3. Views
    • 展示页面
  4. model
    • 处理数据

代码示例:

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

const UserController = require('../controllers/UserController')

router.post('/user', UserController.addUser)

router.put('/user/:id', UserController.updateUser)

router.delete('/user/:id', UserController.deleteUser)

router.get('/user', UserController.getUser)

module.exports = router;
// controllers/UserController.js

const UserService = require('../services/UserService')

const UserController = {
    addUser: (req, res) => {  // 可以改用async/await写法
        const {username, pwd, age} = req.body
        UserService.addUser(username, pwd, age)
            .then(data => {
                res.send({ok: 1})
            })
            .catch(err => console.log(err))
    },
    updateUser: (req, res) => {
        const {username, pwd, age} = req.body
        UserService.updateUser(req, username, pwd, age)
            .then(data => {
                res.send({ok: 1})
            })
            .catch(err => console.log(err))
    },
    deleteUser: (req, res) => {
        UserService.deleteUser(req)
            .then(data => {
                res.send({ok: 1})
            })
            .catch(err => console.log(err))
    },
    getUser: (req, res) => {
        const {page, limit} = req.query
        UserService.getUser(page, limit)
            .then(data => {
                res.send(data)
            })
    }
}

module.exports = UserController
// services/UserService.js

const UserModel = require("../model/UserModel");

const UserService = {
    addUser: (username, pwd, age) => {
        return UserModel.create({
            username,
            pwd,
            age
        })
    },
    updateUser: (req, username, pwd, age) => {
        return UserModel.updateOne({_id: req.params.id}, {
            username,
            pwd,
            age
        })
    },
    deleteUser: (req) => {
        return UserModel.deleteOne({_id: req.params.id})
    },
    getUser: (page, limit) => {
        return UserModel.find({}, ['username', 'age'])
            .sort({age: 1})
            .skip((page - 1) * limit)
            .limit(limit)
    }
}

module.exports = UserService

yarn

安全可靠高性能的项目包管理工具(命令与npm有很多相似之处)

命令注释
yarn install安装项目依赖
yarn add 包名安装指定模块
yarn remove 包名卸载指定模块
yarn add upgrade 包名更新指定模块