nodeを使用するモジュールの一部を記録します


勉強はメモを取らなければならない.忘れやすいからではなく、ハハハハと書きたいからだ.
一、nodeを学び、expressフレームワーク(expressサードパーティ依存パッケージ)を使用してサービスを構築した. 受信パラメータ(body-parser内蔵依存パケットを使用):  1.get:urlencoded形式は、queryとparamsの2つの形式があり、いずれもオブジェクトデータ型です.  2.post:リクエストボディにはurlencoded、formData、jsonの3つのデータ形式があります.nodeの内蔵依存パッケージbody-parserで処理します.formDataデータ形式はbodyParser.urlencoded({extends:false})処理は、extendsキー値がboolean値であり、配列などが深く解析されているかどうかを示す.この要求の要求ヘッダContent-Typeはアプリケーション/x-www-form-urlencodedである.jsonデータ型はbodyParser.json()は、アプリケーション/jsonの場合、このリクエストのリクエストヘッダContent-Typeを処理する.ここで使用するbody-parser形式はすべてのルーティングが設定されており、単独であるルーティング構成はよく分かりませんが、ネットで見たことがありますが試したことがありません.  3.putリクエスト方式postリクエスト方式は類似しており、一般的には修正に用いられる.  4.deleteリクエスト方式はgetリクエスト方式と同様で、一般的に削除操作に用いられる.
二、path内蔵依存パッケージ使用済みの方法  1.resolveメソッド:前のレベルに戻るなど、絶対パスの設定を容易にするために使用します.パラメータにnode実行の絶対アドレスを返さない.1つのパラメータ(パス文字列)を転送して、転送されたパスアドレスを返します.もう1つのパラメータは、相互操作と操作を返して操作後のパスアドレスを返すことができる.  2.extnameメソッド:ファイルの拡張子を返し、パラメータ(ファイル名)を受信します.
三、querystring内蔵依存パッケージ使用済みの方法  1.decodeメソッド:別名praseで、解析する文字列をオブジェクトに解析します.パラメータ=>(str,セパレータ1,セパレータ2,options)    参二区切り記号1:キー値ペア間の区切り記号を指定します.    参三区切り記号2:キー名とキー値の間の区切り記号を指定します.JavaScriptのオブジェクトではなく、一部のObjectプロトタイプでは使用できません.符号化フォーマットを使用する関数を指定します.デフォルトquerystring.unescape()UTF-8符号化フォーマット;解析キーの最大数を指定します.0に指定すると数量制限はありません.既定値は1000です.  2.Encodeメソッド:別名stringify、オブジェクトをクエリー文字列に変換します.パラメータはdecodeメソッドと似ています.
四、fs内蔵依存パッケージ:ファイルを操作する.  1.writeFileメソッド:ファイルを書き込み、ファイルの相対/絶対パスを参照し、2つ目は書き込みデータであり、書き込みを上書きしない場合は3つ目は{flag:"a"}であり、4つ目はコールバック関数(パラメータエラー情報を受信可能)である.  2.readFileメソッド:ファイルを読み込み、ファイルの相対/絶対パスを参照し、参照2はオプションで符号化フォーマットを使用し、最後の参照はコールバック関数である.  3.unlinkメソッド:ファイルを削除し、ファイルの相対/絶対パスを参照し、コールバック関数を参照します.  4.existsメソッド:ファイルが存在するかどうかを判断し、ファイルの相対/絶対パスを参照し、コールバック関数を参照します.  5.renameメソッド:ファイルの名前を変更し、ファイルの絶対パスを参照し、2つの変更後のファイル名(絶対パス形式)、3回のコールバック関数を参照します.  6.copyFileメソッド:ファイルをコピーし、コピーされたファイルの相対/絶対パスを参照し、ターゲットファイルの相対/絶対パスを参照し、3 flags(数値)、4コールバック関数を参照します.私はこのコピーファイルに詳しくない~
五、mongodbサードパーティ依存パッケージを使用してmongodbデータベースに接続します.  まずMongoClientメソッドのconnectメソッドを使用してデータベースに接続し、mongoURL文字列("mongodb://127.0.0.1:27017")、2つのオブジェクト({useUnifiedTopology:true})を追加し、3つのパラメータをコールバック関数(2つのパラメータ、1つはエラー情報、2つは接続に成功して返されたウィンドウ)を参照します.添削検査などはウィンドウを選択しなければならない.db(データベース名).collcetion(集合名)、次は書きません. クエリー方法:  1.クエリー複数:findメソッド、返されるデータはtoArrayメソッドで配列に変換します.  2.クエリー・アイテム:findOneメソッド、1つの位置オブジェクト、2つのコールバック関数を参照します. 増加方法:  1.ドキュメントを追加:insertOneメソッド、ドキュメントオブジェクト、コールバック関数を参照します.  2.複数のドキュメントを追加:insertManyメソッド、複数のドキュメントからなる配列、2コールバック関数を参照します. 削除方法:  1.ドキュメントの削除:deleteOneメソッド、位置オブジェクト、コールバック関数を参照します.  2.複数のドキュメントを削除:ヒップホップ~修正方法を試みたことがない:$set指定位置データを修正$inc増加/減少いくら、加減演算 1.ドキュメント情報の変更:updataOneメソッド、位置オブジェクト、参照2変更オブジェクト、参照3コールバック関数 2.複数のドキュメント情報を修正:ニコニコ~計算を試みたことがないドキュメントの合計数:countDocumentsメソッド、計算条件を参照して、thenメソッドを使用して返されるデータ(パラメータは数)を変換します.
六、formidableサードパーティ依存パッケージ、私はファイルを含むformDataデータを変換するために使用して、依存パッケージの中のIncomingForm構造関数を使用します. const form = new formidable.IncomingForm();   1.encoding変数:符号化フォーマットを選択します.  2.uploadDir変数:ファイルのアップロードパスを選択します.  3.keepExtensions変数:ファイル拡張子を保持するかどうかparseメソッド:formDataオブジェクトを変換し、formDataオブジェクトを参照します.参照2はコールバック関数、コールバック関数の参照1はエラー情報、参照2は非ファイル情報オブジェクト、参照3はファイル情報オブジェクトです.
七、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文、配列、コールバック関数)メソッドで操作します.参照2の配列SQL文の付与値の疑問符配列にはいくつかの要素があり、疑問符を使用しないで2番目のパラメータを書かない.私はすべてカプセル化して、できるだけ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};
}

八、md 5サードパーティ依存パッケージ、md 5暗号化に用いられ、使用方式はmd 5(暗号化データ)である.
九、jwt-simpleサードパーティ依存パケット、tokenトークンのencode符号化、decode復号を生成するために使用します.参照1は符号化/復号データ、参照2は鍵(私が使っている文字列は、他のデータ型で知らなくてもいいかどうか).