记录使用node时的一些模块

学习就要记笔记,不是因为我容易忘记,是因为我想写哈哈哈哈哈哈哈哈哈。

一、学习了node,使用了express框架(express第三方依赖包)搭建了服务。
 接收参数(使用了body-parser内置依赖包):
  1.get:urlencoded形式,有着query和params两种形式,都是对象数据类型。
  2.post:请求主体一般有urlencoded、formData和json三种数据形式。用着node的内置依赖包body-parser来处理。formData数据形式用bodyParser.urlencoded({extends:false})处理,extends键值为boolean值,表示数组等是否深解析,这个请求的请求头Content-Type要是application/x-www-form-urlencoded;json数据类型用bodyParser.json()处理,这个请求的请求头Content-Type要是application/json。这里使用的body-parser形式是所有的路由都设置,单独都某个路由配置我不是很了解在网上看到过但没试过。
  3.put请求方式post请求方式类似,一般是用来做修改的。
  4.delete请求方式与get请求方式类似,一般是用来做删除操作的。

二、path内置依赖包使用过的方法
  1.resolve方法:用来方便设置绝对路径,如返回上一级等。不给参返回node执行的绝对地址;传一个参(路径字符串)返回传的路径地址;再传一个参可与相互操作返回操作后的路径地址。
  2.extname方法:用来返回文件的拓展名,接收一个参(文件名)。

三、querystring内置依赖包使用过的方法
  1.decode方法:别名prase,将要解析的字符串解析为对象。接参=> (str, 分隔符1, 分隔符2, options)
    参一 str:解析的URL查询字符串;
    参二 分隔符1:指定键值对之间的分隔符;
    参三 分隔符2:指定键名与键值之间的分隔符;
    参四 options:不是JavaScript的对象,一些Object原型上的方法不能用。
         decodeURIComponent:指定使用编码格式的函数。默认querystring.unescape() UTF-8编码格式;
         maxKeys:指定解析键的最大数量。指定为0时没有数量限制。默认值为1000。
  2.encode方法:别名stringify,将对象转换为查询字符串,参数与decode方法类似。

四、fs内置依赖包:对文件进行操作的。
  1.writeFile方法:写入文件,参一文件相对/绝对路径,参二为写入数据,如果不覆盖写入则参三为{flag: “a”},参四为回调函数(可接收一个参数错误信息);
  2.readFile方法:读取文件,参一文件相对/绝对路径,参二可选使用编码格式,最后一个参为回调函数;
  3.unlink方法:删除文件,参一文件相对/绝对路径,参二回调函数;
  4.exists方法:判断文件是否存在,参一文件相对/绝对路径,参二回调函数;
  5.rename方法:重命名文件,参一文件绝对路径,参二更改后的文件名(以绝对路径形式),参三回调函数;
  6.copyFile方法:拷贝文件,参一被拷贝文件相对/绝对路径,参二目标文件相对/绝对路径,参三flags(数字),参四回调函数。我对这个拷贝文件不熟~

五、mongodb第三方依赖包,使用它来连接mongodb数据库。
  先使用MongoClient方法的connect方法来连接数据库,参一为mongoURL字符串(“mongodb://127.0.0.1:27017”),参二加个对象({useUnifiedTopology: true}),参三为回调函数(两个参数,参一是错误信息,参二是连接成功返回的一个窗口)。
 增删改查等都要选择窗口.db(数据库名).collcetion(集合名),下面就不写了。
 查询方法:
  1.查询多条:find方法,返回的数据要用toArray方法来转化成数组一下。
  2.查询单条:findOne方法,参一位置对象,参二回调函数。
 增加方法:
  1.增加一条文档:insertOne方法,参一文档对象,参二回调函数。
  2.增加多条文档:insertMany方法,参一多条文档组成的数组,参二回调函数。
 删除方法:
   1.删除一条文档:deleteOne方法,参一位置对象,参二回调函数。
  2.删除多条文档:没尝试过嘻嘻嘻~
修改方法:$set 修改指定位置数据 $inc 增加/减少多少,加减运算
   1.修改一条文档信息:updataOne方法,参一位置对象,参二更改对象,参三回调函数
   2.修改多条文档信息:没尝试过嘻嘻嘻~
 计算文档总条数:countDocuments方法,参一计算条件,要使用then方法来转化一下返回的数据(参数为数量)。

六、formidable第三方依赖包,我用来转换含有文件的formData数据,使用依赖包里面的IncomingForm构造函数。
 const form = new formidable.IncomingForm();
  1.encoding变量:选择编码格式;
  2.uploadDir变量:选择文件上传路径;
  3.keepExtensions变量:是否保留文件拓展名
  4.parse方法:转换formData对象,参一为formData对象;参二为回调函数,回调函数的参一为错误信息,参二为非文件信息对象,参三为文件信息对象。

七、mysql第三方依赖包,使用它来连接操作mysql数据库
  1.设置连接属性:mysql.createConnection(options),options是一个配置对象。

const db = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "root",
    database: dbName
});

  2.连接mysql数据库:db.connect(),参一回调函数,成功的话db就是连接窗口了。

// 连接数据库
db.connect(err => {
    if(err) reject("连接mysql数据库失败");
    else resolve(db);
});

 增删改查都是使用db.query(SQL语句,数组,回调函数)方法来操作的。参二的数组在SQL语句的赋值有多少问号数组中就有几个元素,没有使用问号就第二个参数不写。增删改查我都封装了一下,想尽可能避免使用SQL语句。
  3.查询数据。

// 查询(数据库名,表名,控制对象)  查询到的数据以数组形式返回
// const control = {limit: 2, sort: "id asc", condition: "id='1'"};
// 注意:control可以不传,skip默认0,limit默认6,排序默认没有(不要就不传),查找条件默认没有
//          查找条件condition和sort排序都要以sql语句的格式来写(字符串)
async findDocuments(dbName, tableName, control={}){
    const {skip=0, limit=6, sort, condition} = control;

    const SORT = sort === undefined ? "" : `ORDER BY ${sort}`;  // 排序
    const LIMIT = `LIMIT ${skip},${limit}`;                     // 限制
    const WHERE = condition === undefined ? "": `WHERE ${condition}`;  // 条件

    const findSQL = `SELECT * FROM ${tableName} ${WHERE} ${SORT} ${LIMIT}`;
    console.log(findSQL);
    const db = await _connect(dbName);
    return new Promise((resolve, reject) => {
        db.query(findSQL, (err, results) => {
            if(err) reject({ok: -1, message: "查找数据失败"});
            else if(results.length > 0) resolve({ok: 1, message: "查找数据成功", results});
            else resolve({ok: -1, message: "数据库中没找到该数据"});
        });
    });
}

  4.插入数据。

// 插入数据(数据库名,表名,插入文档对象)
// const document = { id: 2, adminName: "ho", adminPwd: "hohoho" }
async insertDocument(dbName, tableName, document){
    const rowStr = Object.keys(document).join(",");
    const valuesStr = Object.values(document).map(item => "'"+item+"'").join(",");
    const insertSQL = `INSERT INTO ${tableName}(${rowStr}) values(${valuesStr})`;
    console.log(insertSQL);
    
    const db = await _connect(dbName);
    return new Promise((resolve, reject) => {
        db.query(insertSQL, (err, result) => {
            if(err) reject({ok: -1, message: "插入数据失败"});
            else if(result.affectedRows > 0) resolve({ok: 1, message: "插入数据成功"});
            else resolve({ok: -1, message: "表规则该条数据插入不进去"})
        });
    });
}

  5.更新数据。

// 更新数据(数据库名,表名,位置对象,更新对象)
// const whereObj = {id: 1};
// const upObj = {id: 4};
async updateDocument(dbName, tableName, whereObj, upObj){
    let WHERE = "WHERE ";    // 在哪儿位置
    let SET = "SET ";      // 更新的数据

    for(let key in whereObj)
        WHERE += key + "='" + whereObj[key] + "'";
    for(let key in upObj)
        SET += key + "='" + upObj[key] + "'";
    const updateSQL = `update ${tableName} ${SET} ${WHERE}`;

    const db = await _connect(dbName);
    return new Promise((resolve, reject) => {
        db.query(updateSQL, (err, result) => {
            if(err) reject({ok: -1, message: "更新数据失败"});
            else if(result.affectedRows > 0) resolve({ok: 1, message: "更新数据成功"});
            else resolve({ok: -1, message: "表中该条数据就是这样的"});
        });
    });
},

  6.删除数据。

// 删除数据(数据库名,表名,位置对象)
// const whereObj = {id: 4};
async delDocument(dbName, tableName, whereObj){
    let WHERE = "WHERE ";
    for(let key in whereObj)
        WHERE += key + "='" + whereObj[key] + "'";
    const deleteSQL = `delete from ${tableName} ${WHERE}`;
    console.log(deleteSQL);

    const db = await _connect(dbName);
    return new Promise((resolve, reject) => {
        db.query(deleteSQL, (err, result) => {
            if(err) reject({ok: -1, message: "删除数据失败"});
            else if(result.affectedRows) resolve({ok: 1, message: "删除数据成功"});
            else resolve({ok: -1, message: "表中没有找到该数据所以没删除数据"});
        });
    });
}

  7.计算数据条数。

// 计算数据条数(数据库名,表名,行的名字,计算条件(字符串))  条件没有不要传""(即不写condition),""会报错
async countDocuments(dbName, tableName, rowName="id", condition){
    const WHERE = condition === undefined ? "" : `where ${condition}`;
    const countSQL = `select count(${rowName}) from ${tableName} ${WHERE}`;
    console.log(countSQL);

    const db = await _connect(dbName);
    return new Promise((resolve, reject) => {
        db.query(countSQL, (err, result) => {
            console.log(err, result);
            if(err) reject({ok: -1, message: "计算表内数据条数错误"});
            else if(result) resolve({ok: 1, message: "计算表内数据总条数成功", count: result[0]["count("+rowName+")"]});
        });
    });
},

  8.分页查找数据。

// 分页(数据库名,表名,页码下标,限制数量,控制对象(sort,condition)) sort和condit要写成sql语句形式!!
async page(dbName, tableName, pageIndex=1, limit=5, control={}){
const {count} = await countDocuments(dbName, tableName, "goods_id", control.condition);
    console.log("总条数" + count);

    let sumPage = Math.ceil(count / limit);
    if(sumPage < 1) sumPage = 1;
    if(pageIndex > sumPage) pageIndex = sumPage;

    const pageObj = {
        skip: (pageIndex - 1) * limit,
        limit,
        sort: control.sort,
        condition: control.condition
    }
    const {results} = await findDocuments(dbName, tableName, pageObj);
    return {ok: 1, message: "分页查找成功", pageIndex, limit, sumPage, [tableName]: results};
}

八、md5第三方依赖包,用来md5加密的,使用方式为md5(加密数据);

九、jwt-simple第三方依赖包,我用来生成token令牌的,encode编码,decode解码。参一为编码/解码数据,参二为钥匙(我用的字符串,还可不可以用其它的数据类型不知道)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值