npm安装express包
可以设立一个服务器 ,但是你直接打开回显示404 ,因为没有设置路由
const express = require('express');
const app = express();
const PORT = 4001;
app.listen(PORT, () => {
console.log(`Server is listening on port ${PORT}`);
});
请求方式
路由及方法
tips:即使有两条以/expressions 为路径的路由,第一个匹配并发送响应,第二个路由将被忽略。
const express = require('express');
const app = express();
const {
getElementById,
getIndexById,
updateElement,
seedElements,
createElement
} = require('./utils');
const PORT = process.env.PORT || 4001;
app.use(express.static('public'));
const expressions = [];
seedElements(expressions, 'expressions');
const animals = [];
seedElements(animals, 'animals');
// Get all expressions
app.get('/expressions', (req, res, next) => {
res.send(expressions);
});
// Get a single expression 动态路由
app.get('/expressions/:id', (req, res, next) => {
const foundExpression = getElementById(req.params.id, expressions);
if (foundExpression) {
res.send(foundExpression);
} else {
res.status(404).send();
}
});
// Update an expression 更新
app.put('/expressions/:id', (req, res, next) => {
const expressionIndex = getIndexById(req.params.id, expressions);
if (expressionIndex !== -1) {
updateElement(req.params.id, req.query, expressions);
res.send(expressions[expressionIndex]);
} else {
res.status(404).send();
}
});
// Create an expression 添加
app.post('/expressions', (req, res, next) => {
const receivedExpression = createElement('expressions', req.query);
if (receivedExpression) {
expressions.push(receivedExpression);
res.status(201).send(receivedExpression);
} else {
res.status(400).send();
}
});
// Delete an expression 删除
app.delete('/expressions/:id', (req, res, next) => {
const expressionIndex = getIndexById(req.params.id, expressions);
if (expressionIndex !== -1) {
expressions.splice(expressionIndex, 1);
res.status(204).send();
} else {
res.status(404).send();
}
});
app.listen(PORT, () => {
console.log(`Server is listening on ${PORT}`);
});
路由器 router
好处:划分功能模块 可以省下前缀
const express = require('express');
const {
getElementById,
getIndexById,
updateElement,
seedElements,
createElement
} = require('./utils');
let expressions = [];
seedElements(expressions, 'expressions');
expressionsRouter = express.Router();
// Get all expressions
expressionsRouter.get('/', (req, res, next) => {
res.send(expressions);
});
// Get a single expression
expressionsRouter.get('/:id', (req, res, next) => {
const foundExpression = getElementById(req.params.id, expressions);
if (foundExpression) {
res.send(foundExpression);
} else {
res.status(404).send();
}
});
// Update an expression
expressionsRouter.put('/:id', (req, res, next) => {
const expressionIndex = getIndexById(req.params.id, expressions);
if (expressionIndex !== -1) {
updateElement(req.params.id, req.query, expressions);
res.send(expressions[expressionIndex]);
} else {
res.status(404).send();
}
});
// Create an expression
expressionsRouter.post('/', (req, res, next) => {
const receivedExpression = createElement('expressions', req.query);
if (receivedExpression) {
expressions.push(receivedExpression);
res.status(201).send(receivedExpression);
} else {
res.status(400).send();
}
});
// Delete an expression
expressionsRouter.delete('/:id', (req, res, next) => {
const expressionIndex = getIndexById(req.params.id, expressions);
if (expressionIndex !== -1) {
expressions.splice(expressionIndex, 1);
res.status(204).send();
} else {
res.status(404).send();
}
});
module.exports = expressionsRouter;
中间件
避免重复代码
降低复杂性
中间件在这接受请求和发送响应的边界上运行。
在 Express 中,中间件是一个函数。中间件可以对请求和响应对象执行逻辑,例如:检查请求,根据请求执行一些逻辑,向响应附加信息,向响应附加状态,将响应发送回用户,或简单地传递对另一个中间件的请求和响应。中间件可以做这些事情的任何组合,也可以做任何其他 Javascript 函数可以做的事情