express 框架

一.什么是 express ?

  • 基于 Node.js 平台开发的 "web 开发框架" ,就是一个 node.js 模块

  • express的作用:它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。

  • express 同时也是 Node.js 的一个模块

 

二.express 特点

  1. 实现了路由功能

  2. 中间件(函数)功能

  3. 对 req 和 res 对象的扩展

  4. 可以集成其他模板引擎

 

 三.express 基本使用

  步骤总结:

    1、加载 express 模块

    2、创建 express 实例(一般叫 app )

    3、设计路由

    4、启动监听服务

  

  **********使用 express 框架模拟 Apache 服务器处理静态资源

  • 主要使用到的方法express.static('public')

    • express.static('public')的返回值就是一个函数,这个函数的作用就是根据请求,读取静态资源文件并响应给用户

    • 注意:static() 方法参数路径要写 绝对路径,不要写相对路径。相对路径还是相对执行node命令的路径

  • 主要使用到的方法 app.use()

    • use()方法的参数1表示"虚拟路径",参数2表示要开放的静态资源目录

  • 如何向客户端发送单个静态文件

    • res.sendFile() 方法

   

  *********res.send() 和 res.end() 区别:

  区别1:
    - res.send() 参数可以是 a Buffer object、a String、 an object、 an Array.

    - res.end() 参数类型只能是 Buffer 对象或者是字符串

  区别2:
   - res.send() 会自动发送更多的响应报文头,其中就就包括 Content-Type: text/html; charset=utf-8,所以没有乱码

四.注册路由的使用方法区别

  1.app.use()

1. 在进行路由匹配的时候不限定方法,什么请求方法都可以
2. 请求路径中的第一部分只要与 /index 相等即可,并不要求请求路径(pathname)完全匹配

  2.通过 app.all() 注册路由

    1、不限定请求方法;

    2、请求路径的pathname必须完全匹配

app.all('/index', function (req, res) {
res.send('hello world! 你好世界!');
});

 

五、express 中的中间件

  • 中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。

  • 常规中间件(应用级中间件)的回调函数,一般有3个参数

    • req, res, next

    • 其中next()是一个函数,通过这个函数把执行流程交给下一个中间件

  • 可以挂在中间件的部分方法

    • app.use()

    • app.get()、app.post()、app.put()、app.delete()、...等各种请求方法

    • 注意:在挂载中间件时 next() 方法的重要性,不调用该方法无法执行到下一个中间件

  • 中间件的应用场景

    • 利用中间件实现记录日志功能

六、封装使用mongo

// 数据操作模块

// 1. 加载 mongodb 模块
var mongodb = require('mongodb');
// 加载 config 模块
var config = require('./config.js');


// 2. 封装一个执行连接数据库操作的方法
function connectDB(callback) {
  // 执行连接数据库操作
  mongodb.MongoClient.connect(config.connStr, function (err, db) {
    if (err) {
      throw err;
    }
    // 调用回调函数将 db 返回
    callback(db);
  });
}



// 3. 封装一个查询所有数据的方法
module.exports.findAll = function (collectionName, callback) {
  // 1. 连接数据库
  connectDB(function (db) {
    // 2. 执行查询数据的方法
    db.collection(collectionName).find().toArray(function (err, docs) {
      // 3. 关闭数据库
      db.close();

      // 4. 把结果返回
      callback(err, docs);
    });
  });
};


// 4. 封装一个插入数据的方法
module.exports.insertOne = function (collectionName, data, callback) {
  // 1. 连接数据库
  connectDB(function (db) {
    // 2. 插入数据
    db.collection(collectionName).insertOne(data, function (err, result) {
      // 关闭数据库
      db.close();
      callback(err, result);
    });
  });
};


// 将字符串 _id 转换为 ObjectID
module.exports.ObjectID = function (_id) {
  // 把 字符串 _id 转换为 ObjectID
  return new mongodb.ObjectID(_id);
};



// 封装查询1条数据的方法
module.exports.findOne = function (collectionName, filter, callback) {
  // 1. 连接数据库
  connectDB(function (db) {
    // 2. 根据条件执行查询
    db.collection(collectionName).findOne(filter, function (err, doc) {
      // 3. 关闭数据库连接
      db.close();

      // 4. 把结果返回
      callback(err, doc);
    });
  });
};


// 封装一个更新操作
module.exports.updateOne = function (collectionName, filter, updateData, callback) {
  // 1. 连接数据库
  connectDB(function (db) {
    // 2. 执行更新操作
    db.collection(collectionName).updateOne(filter, updateData, function (err, result) {
      // 1. 关闭数据库
      db.close();

      // 2. 通过回调函数将数据返回
      callback(err, result);
    });
  });
};


// 封装一个删除方法
module.exports.deleteOne = function (collectionName, filter, callback) {
  // 1. 连接数据库
  connectDB(function (db) {
    // 2. 执行删除操作
    db.collection(collectionName).deleteOne(filter, function (err, result) {
      // 1. 关闭数据库
      db.close();
      // 2. 通过回调函数返回
      callback(err, result);
    });
  });
};

 

 

 

posted @ 2022-04-09 16:29  阿布_alone  阅读(164)  评论(0编辑  收藏  举报
TOP