express的基本操作

建立server

  1. 创建express对象

    const express = require('express');
    
    const app = express();
    
  2. 监听端口

    const port = 3000;
    app.listen(port, () => {
      console.log(`App running on port ${port}...`);
    });
    
  3. 请求返回数据

    对象.请求方法(url路径,回调函数)

    返回普通数据,send

    app.get('/', (req, res) => {
      res
        .status(200)
        .send('Hello from the server side!');
    });
    

    返回json数据,json

    app.get('/', (req, res) => {
      res
        .status(200)
        .json({ message: 'Hello from the server side!', app: 'Natours' });
    });
    

基础get/post 数据

get

const express = require('express');
const fs = require('fs');

const app = express();

app.use(express.json());

const tours = JSON.parse(
  fs.readFileSync(`${__dirname}/dev-data/data/tours-simple.json`)
);

app.get('/api/v1/tours', (req, res) => {
  res.status(200).json({
    status: 'success',
    results: tours.length,
    data: {
      tours,
    },
  });
});

});

const port = 3000;
app.listen(port, () => {
  console.log(`App running on port ${port}...`);
});

post

const express = require('express');
const fs = require('fs');

const app = express();

app.use(express.json());

const tours = JSON.parse(
  fs.readFileSync(`${__dirname}/dev-data/data/tours-simple.json`)
);

app.post('/api/v1/tours', (req, res) => {
  const newId = tours[tours.length - 1].id + 1;
  const newTour = Object.assign({ id: newId }, req.body);

  tours.push(newTour);

  fs.writeFile(
    `${__dirname}/dev-data/data/tours-simple.json`,
    JSON.stringify(tours),
    (err) => {
      res.status(201).json({
        status: 'success',
        data: {
          newTour,
        },
      });
    }
  );

  // 这里注意不能返回两个数据
  // res.send('Done');
});

const port = 3000;
app.listen(port, () => {
  console.log(`App running on port ${port}...`);
});

根据url绑定对象获取对应的数据

app.get('/api/v1/tours/:id', (req, res) => {
  // 返回{ id:'5' }
  console.log(req.params);

  // 将参数转换为数值类型
  const id = req.params.id * 1;

  const tour = tours.find((el) => el.id === id);
  // if (id > tours.length - 1) {
  if (!tour) {
    return res.status(404).json({
      status: 'fail',
      message: 'Invalid ID',
    });
  }

  res.status(200).json({
    status: 'success',
    data: {
      tour,
    },
  });
});

更新数据

  1. put/patch

删除数据

  1. delete
app.delete('/api/v1/tours/:id', (req, res) => {
  if (req.params.id * 1 > tours.length - 1) {
    return res.status(404).json({
      status: 'fail',
      message: 'Invalid ID',
    });
  }
  res.status(204).json({
    status: 'success',
    data: null,
  });
});

route重构

抽离出所有的方法后,定义接口:

app.get('/api/v1/tours', getAllTours);
app.get('/api/v1/tours/:id', getTour);
app.post('/api/v1/tours', createTour);
app.patch('/api/v1/tours/:id', updateTour);
app.delete('/api/v1/tours/:id', deleteTour);

由于路径有重复的,所以我们可以简化

app.route('/api/v1/tours').get(getAllTours).post(createTour);
app
  .route('/api/v1/tours/:id')
  .get(getTour)
  .patch(updateTour)
  .delete(deleteTour);

创建路由器

const router = express.Router();

router.route('/').get(getAllTours).post(createTour);
router.route('/:id').get(getTour).patch(updateTour).delete(deleteTour);

app.use('/api/v1/tours', tourRouter);

访问静态文件

app.js

// 1) middlewares
app.use(morgan('dev'));
app.use(express.json());
app.use(express.static(`${__dirname}/public/`));

在网页中访问

http://127.0.0.1:3000/overview.html

overview.html在public文件下,为什么url中不需要加入public文件呢?

因为nodejs的机制,如果找不到就会自动往public文件夹中找

环境变量

  1. 访问环境变量

    console.log(process.env);
    
  2. 设置环境变量

    config.env

    NODE_ENV=development
    PORT=3000
    USER=kihyun
    PASSWORD=123456
    

    安装组件

    dotenv

    server.js中引入

    const dotenv = require('dotenv');
    dotenv.config({ path: './config.env' });
    
    const app = require('./app');
    
    // 4) start server
    const port = process.env.PORT || 3000;
    app.listen(port, () => {
      console.log(`App running on port ${port}...`);
    });
    
posted @ 2022-06-22 01:06  kihyun  阅读(101)  评论(0编辑  收藏  举报