美文网首页
nodeJS搭建web服务器

nodeJS搭建web服务器

作者: 俊滔_b059 | 来源:发表于2018-04-02 16:46 被阅读5次

    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
    └── express@4.15.2  -> /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);
            });
        })
    }
    

    相关文章

      网友评论

          本文标题:nodeJS搭建web服务器

          本文链接:https://www.haomeiwen.com/subject/xgswqftx.html