NodeJS
运行在服务端的JS
介绍
- 跨平台
- 事件驱动
- 异步I/O
接口规范
- RESTful
- URL地址中仅包含名词(定义资源,单一路径)
- 使用HTTP动词(操作资源,请求类型)
- limit
- 返回记录的数量
- offset
- 返回记录的开始位置
- page
- 页数
- per_page
- 每页的记录数
- sortby
- 返回的结果按照哪个属性进行排序
- order
- 排序顺序
- 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;
业务分层
- Router
- 请求分发给C层
- Controller
- 处理业务逻辑
- Views
- 展示页面
- 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 包名 | 更新指定模块 |