npm安装express包
可以设立一个服务器 ,但是你直接打开回显示404 ,因为没有设置路由

  1. const express = require('express');
  2. const app = express();
  3. const PORT = 4001;
  4. app.listen(PORT, () => {
  5. console.log(`Server is listening on port ${PORT}`);
  6. });

请求方式

get获取
put更新
post添加

路由及方法

tips:即使有两条以/expressions 为路径的路由,第一个匹配并发送响应,第二个路由将被忽略。

  1. const express = require('express');
  2. const app = express();
  3. const {
  4. getElementById,
  5. getIndexById,
  6. updateElement,
  7. seedElements,
  8. createElement
  9. } = require('./utils');
  10. const PORT = process.env.PORT || 4001;
  11. app.use(express.static('public'));
  12. const expressions = [];
  13. seedElements(expressions, 'expressions');
  14. const animals = [];
  15. seedElements(animals, 'animals');
  16. // Get all expressions
  17. app.get('/expressions', (req, res, next) => {
  18. res.send(expressions);
  19. });
  20. // Get a single expression 动态路由
  21. app.get('/expressions/:id', (req, res, next) => {
  22. const foundExpression = getElementById(req.params.id, expressions);
  23. if (foundExpression) {
  24. res.send(foundExpression);
  25. } else {
  26. res.status(404).send();
  27. }
  28. });
  29. // Update an expression 更新
  30. app.put('/expressions/:id', (req, res, next) => {
  31. const expressionIndex = getIndexById(req.params.id, expressions);
  32. if (expressionIndex !== -1) {
  33. updateElement(req.params.id, req.query, expressions);
  34. res.send(expressions[expressionIndex]);
  35. } else {
  36. res.status(404).send();
  37. }
  38. });
  39. // Create an expression 添加
  40. app.post('/expressions', (req, res, next) => {
  41. const receivedExpression = createElement('expressions', req.query);
  42. if (receivedExpression) {
  43. expressions.push(receivedExpression);
  44. res.status(201).send(receivedExpression);
  45. } else {
  46. res.status(400).send();
  47. }
  48. });
  49. // Delete an expression 删除
  50. app.delete('/expressions/:id', (req, res, next) => {
  51. const expressionIndex = getIndexById(req.params.id, expressions);
  52. if (expressionIndex !== -1) {
  53. expressions.splice(expressionIndex, 1);
  54. res.status(204).send();
  55. } else {
  56. res.status(404).send();
  57. }
  58. });
  59. app.listen(PORT, () => {
  60. console.log(`Server is listening on ${PORT}`);
  61. });

路由器 router

好处:划分功能模块 可以省下前缀
image.png

  1. const express = require('express');
  2. const {
  3. getElementById,
  4. getIndexById,
  5. updateElement,
  6. seedElements,
  7. createElement
  8. } = require('./utils');
  9. let expressions = [];
  10. seedElements(expressions, 'expressions');
  11. expressionsRouter = express.Router();
  12. // Get all expressions
  13. expressionsRouter.get('/', (req, res, next) => {
  14. res.send(expressions);
  15. });
  16. // Get a single expression
  17. expressionsRouter.get('/:id', (req, res, next) => {
  18. const foundExpression = getElementById(req.params.id, expressions);
  19. if (foundExpression) {
  20. res.send(foundExpression);
  21. } else {
  22. res.status(404).send();
  23. }
  24. });
  25. // Update an expression
  26. expressionsRouter.put('/:id', (req, res, next) => {
  27. const expressionIndex = getIndexById(req.params.id, expressions);
  28. if (expressionIndex !== -1) {
  29. updateElement(req.params.id, req.query, expressions);
  30. res.send(expressions[expressionIndex]);
  31. } else {
  32. res.status(404).send();
  33. }
  34. });
  35. // Create an expression
  36. expressionsRouter.post('/', (req, res, next) => {
  37. const receivedExpression = createElement('expressions', req.query);
  38. if (receivedExpression) {
  39. expressions.push(receivedExpression);
  40. res.status(201).send(receivedExpression);
  41. } else {
  42. res.status(400).send();
  43. }
  44. });
  45. // Delete an expression
  46. expressionsRouter.delete('/:id', (req, res, next) => {
  47. const expressionIndex = getIndexById(req.params.id, expressions);
  48. if (expressionIndex !== -1) {
  49. expressions.splice(expressionIndex, 1);
  50. res.status(204).send();
  51. } else {
  52. res.status(404).send();
  53. }
  54. });
  55. module.exports = expressionsRouter;

中间件

避免重复代码
降低复杂性
中间件在这接受请求和发送响应的边界上运行。
在 Express 中,中间件是一个函数。中间件可以对请求和响应对象执行逻辑,例如:检查请求,根据请求执行一些逻辑,向响应附加信息,向响应附加状态,将响应发送回用户,或简单地传递对另一个中间件的请求和响应。中间件可以做这些事情的任何组合,也可以做任何其他 Javascript 函数可以做的事情