zoukankan      html  css  js  c++  java
  • 初次接触express

    今天初次使用express,还是写写心得好了。

    1. 中间件
    2. mothod
    3. nodemon
    4. ~的使用

    中间件

    中间件我觉得就是个开箱即用的工具,写好中间件函数,直接use就好。

    示例1:

    let myLogger = (req, res, next) => {
      console.log('hi');
    }
    
    app.use(myLogger);
    

    示例2:

    // 匿名函数
    app.use((req, res, next) => {
      console.log('hi');
    });
    

    另外,中间件的参数有err(错误),req(请求),res(响应),next(下一个中间件),执行完当前中间件需要调用next();不然后面的get、post、use都不会执行。

    示例1:

    // 匿名函数
    app.use((req, res, next) => {
      console.log('hi');
      next(); // 注释掉这一句就不会走下面的get
    });
    
    app.get('/', (req, res) => {
      console.log('im get');
    });
    

    中间件的顺序也是有规定的,如果中间件调用的位置错误,很有可能报错。

    示例1:

    // 立马抛出404
    app.use((req, res, next) => {
      throw Error('404 not found');
    });
    
    // 下面将不会调用
    app.get('/', (req, res) => {
      console.log('im get');
    });
    

    所以要按逻辑顺序排列,如:请求/api/user?api-key=foo,如果要在/api的时候做处理,那就app.use('/api',()=>{doSomething();next()}),然后再请求app.get(),最后放抛出异常的use。

    示例1:

    app.use('/api', (req, res, next) => {
      // 遇到错误立马调用下一个中间件并返回
      if (!key) return next(error(400, 'api-key required'));
      next();
    });
    app.get('/api/users', (req, res, next) => {
      res.send(users);
    });
    app.use((err, req, res, next) => {
      res.status(err.status || 500);
      res.send({error: err.message});
    });
    app.use((req, res) => {
      res.status(404);
      res.send({error: '404 not found'});
    });
    

    method

    method其实是个很小的东西了,对应get、post、put、delete等。
    在express调用的模式就是app.method()

    示例1:

    app.get('/', (req, res) => {
      console.log('im get');
    });
    

    modemon

    nodemon是一个小工具,类似webpack -w的东西,可以用npm全局安装。
    省去了修改node主文件后需要重启node的麻烦。
    具体用法:nodemon index.js

    ~的使用

    这次还有一个收获就是~。这是个神奇的符号,叫按位非。

    示例1:

    if (!~apiKeys.indexOf(key)) return next(error(401, 'invalid api key'));
    
    • 如果在apiKeys里找不到key,那么indexOf的返回值就是-1,~以后就是0,!类型转换为true。
    • 找的到key,返回值就是下标,~以后就是非零数,!类型转换为false。

    结论:!~的组合拳意思为不存在的时候执行。

  • 相关阅读:
    INV*更新物料信息
    WPF设置样式的几种方式
    使用InternetGetConnectedState判断本地网络状态(C#举例)
    WinInet API详解
    WPF导航总结
    WPF中的命令与命令绑定导航
    WPF依赖属性相关博客导航
    关于WPF自定义控件(导航)
    WPF送走控件的focus方法
    MvvmLight学习篇—— Mvvm Light Toolkit for wpf/silverlight系列(导航)
  • 原文地址:https://www.cnblogs.com/dkplus/p/8671866.html
Copyright © 2011-2022 走看看