ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

express的基本操作

2022-06-22 01:33:12  阅读:150  来源: 互联网

标签:const app express id tours 基本操作 port


建立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}...`);
    });
    

标签:const,app,express,id,tours,基本操作,port
来源: https://www.cnblogs.com/kihyunBlog/p/16399004.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有