NodeJS Webサーバの構築

6143 ワード

1.インストールexpressフレームワークのダウンロード
Expressフレームワークのコア特性:
  • は、HTTP要求に応答するためにミドルウェアを設定することができる.
  • は、異なるHTTP要求動作を実行するためのルーティングテーブルを定義する.
  • は、テンプレートにパラメータを渡すことによってHTMLページを動的にレンダリングすることができる.
  • cnpm install express --save
    
    //node.js    ,     JSON, Raw, Text   URL      
    cnpm install body-parser --save  
    
    //       Cookie   。  req.cookies        cookie,        
    cnpm install cookie-parser --save
    
    //node.js    ,     enctype="multipart/form-data"(     MIME  )     
    cnpm install multer --save
    
    //    ,        express       
    cnpm list express
    /data/www/node
    └── [email protected]  -> /Users/tianqixin/www/node/node_modules/.4.15.2@express
    

    2.hello world
    詳細はこちら
    3.静的リソース
    app.use(express.static('public'));
    //PS:     'public' ,     url  public/       
    

    4.GETとPOSTリクエスト
    //===============GET===============
    app.get('/process_get', function (req, res) { 
       //    JSON   
       var response = {
           "first_name":req.query.first_name,
           "last_name":req.query.last_name
       };
       console.log(response);
       res.end(JSON.stringify(response));
    }) 
    
    //===============POST===============
    var bodyParser = require('body-parser');
    
    //    application/x-www-form-urlencoded     
    var urlencodedParser = bodyParser.urlencoded({ extended: false })
    
    app.post('/process_post', urlencodedParser, function (req, res) { 
       //    JSON   
       var response = {
           "first_name":req.body.first_name,
           "last_name":req.body.last_name
       };
       console.log(response);
       res.end(JSON.stringify(response));
    })
    
    //  :
    //get        req.query.xxx
    //post        req.body.xxx
    //post    urlencodedParser         
    

    5.ファイルアップロードおよびfsモジュール
    まずnodeJSのfsモジュールについて簡単に説明します
    //    
    var fs = require('fs'),
    path = require('path');
    

    fsモジュールはnodeJSがファイルを操作する機能モジュールで、強力なapiが豊富で、ここでは一般的によく使われる読み取りと書き込みのプレゼンテーションしかしません.他のAPIをもっと知りたいなら、ここをクリックしてください.
    ファイルを読む
    //readFile(filename,[options],callback);
    
    /**
     * filename,     ,   
     * [options],    ,   flag(      , r+   ;w+   ,        ) encoding  
     * callback           ,       err,   data   
     */
    
    fs.readFile( req.files[0].path,  (err,data) => {
        if(err){
            console.log('  ')
        }
    })
    

    ファイルの書き込み
    // fs.writeFile(filename,data,[options],callback);
    
    /**
     * filename,         ? path+filename
     * data,      ,       Buffer  
     * [options],flag,mode(  ),encoding
     * callback           ,       err,   data   
     */
    
    //multer               [ 1]
    var multer  = require('multer');
    app.use(multer({ dest: '/tmp/'}).array('image'));
    
    //                  /upload/    ,         
    var des_file =  __dirname + "/upload/" + req.files[0].originalname;
    
    fs.writeFile(des_file, data, err => {
        if(err){
            console.log(err)
        }else{
            response = {
                message: 'success!',
                filename: req.files[0].originalname
            }; 
        }
        console.log(response);
        res.end(JSON.stringify( response))
    })
    

    注1:ポイントmulterの詳細を確認します
    6.簡易ログイン機能
    使用されるモジュール:fs,bodyParser
    var express = require('express');
    var app = express();
    var fs = require("fs");
    var bodyParser = require('body-parser');
     
    //    application/x-www-form-urlencoded     
    var urlencodedParser = bodyParser.urlencoded({ extended: false })
    
    const PATH = __dirname+'/';
    
    //    
    app.post('/login',urlencodedParser, (req,res) => {
        fs.readFile( PATH + "user.json", 'utf8', function (err, data) {
            data = JSON.parse( data );
    
            let userName = req.body.userName;
            let passWord = req.body.passWord;
    
            console.log('      : '+req.body.userName,req.body.passWord); 
    
            for(let i in data){
                let item = data[i];
                
                if(item.name == userName && item.password == passWord){
                    console.log(item);
                    console.log('login successful!')
                    res.sendFile(PATH+"/index.html")
                    return 
                }else{
                    res.end('wrong password')
                }
    
            } 
        });
        
    })
    

    7.簡易登録機能
    原理:ユーザー名は既に登録されていますか?=>jsonファイルへの書き込み
    /**
     *   
     * @param  {[type]} err   [description]
     * @param  {[type]} data) {     data      [description]
     * @return {[type]}       [description]
     */
    app.post('/register',urlencodedParser, (req,res) => {
    
        let userName = req.body.userName;
        let passWord = req.body.passWord;       
    
        fs.readFile( PATH + "user.json", 'utf8', function (err, data) {
            data = JSON.parse( data ); 
            let data_len = Object.keys(data).length;
            let count = 0
    
            for(let i in data){
                let item = data[i];
    
                console.log(typeof(userName),userName , item,userName in item)
                if(userName == item.name){
                    return res.json('           ') 
                 }else{
                    count++;
                 }
            }
            if(count == data_len){
                let user_tem = {
                    "name": userName,
                    "password": passWord,
                    "id": data_len+1
                };
    
                data['user'+(data_len+1)] = user_tem;
    
                writeFile(JSON.stringify(data));
    
                return res.json('    ')
    
            }
    
            console.log(data)
             
        })//readFile
    })
    
    /**
     *   user.json
     * @param  {[type]} text [description]
     * @return {[type]}      [description]
     */
    function writeFile(text){
        fs.writeFile('./user.json', text, function(err){
            if (err) {
                throw err;
            }
    
            console.log('    ');
    
            //          
            fs.readFile('./user.json', 'utf-8', function(err, data) {
                if (err) {
                    throw err;
                }
                console.log(data);
            });
        })
    }