zoukankan      html  css  js  c++  java
  • 用express框架自己设计web服务器

    首先要安装express框架
    命令行输入

    npm install -g express
    

    等待安装完成即可
    这里是全局安装express框架
    需要设置环境变量NODE_PATH
    将express模块路径添加到NODE_PATH中

    另外,你需要简单了解路由的概念
    比如:baidu.com/file/2333.jpg
    其中 “baidu.com”是host
    "/file"指的就是路由,由服务器处理你需要申请访问的路由
    "/file/2333.jpg" 需要就是访问的链接

    接下来,直接上代码

    //导入express模块
    var express = require('express');
    var bodyParser = require('body-parser');
    var url = require('url');
    var app = express();
    
    // 创建 application/x-www-form-urlencoded 编码解析
    var urlencodedParser = bodyParser.urlencoded({ extended: false })
    
    //这里是服务器处理GET请求的方法
    //'*'代表处理任何GET链接
    //比如GET baidu.com/2333/ ,"/2333/"就会被该get方法所接受
    //同时传递相关参数给回调函数
    app.get('*', function (req, res) {
    
        //解析传入的路由链接,如果传入的链接包含中文,需要使用URI反编码
        var reqPath = decodeURI(url.parse(req.url).pathname);
    
        //输出GET请求客户端的IP地址,以及链接
        console.log('GET请求地址:' + req.ip.match(/d+.d+.d+.d+/) + ";链接:" + reqPath);
    
        //这里做个小示范
        //如果GET /file/的话,就把本地路径下/file/index.html文件发送给客户端
        var filePath;
    
        if (reqPath.endsWith('/')) {
    
            filePath = reqPath.substr(1) + 'index.html';
    
            if (fs.existsSync(filePath)) {
                
                //该方法可直接发送文件,包括文本,图片等...
                res.sendFile(filePath);
    
            } else {//如果没有该文件
    
                //该方法直接发送目标数据
                res.send("访问错误!!");
            }
        }
        else {
    
            filePath = __dirname + reqPath;
    
            if (fs.existsSync(filePath)) {
    
                res.sendFile(filePath);
            } else {
    
                res.send("访问错误!!");
            }
        }
    })
    
    
    //这里是处理POST请求
    //'*'表示处理任何POST链接
    //比如 POST /ADD/,那么“/ADD/”就会被该方法所接受
    //同时传递相关参数给回调函数
    app.post('*', urlencodedParser, function (req, res) {
    
        //解析POST链接
        var reqPath = decodeURI(url.parse(req.url).pathname);
    
        console.log('POST请求地址:' + req.ip.match(/d+.d+.d+.d+/) + ";链接:" + reqPath);
    
        //打印客户端传过来的POST数据,可以是json字符串或者其它什么的
        //比如客户端POST /hello,并发送“hello world”字符串,
        //那么此处就会打印hello world
        console.log(req.body);
        //post请求也需要给客户端一个回应
        res.send("成功!!");
    })
    
    
    //启动服务器
    //web服务器需要提供80端口给外部访问
    var server = app.listen(80, function () {
        console.log("启动服务器");
        //服务器默认的IP地址就是当前主机的IP地址
        console.log(server.address());
    })
    
    
    

    当然可以可使用专门的GET,POST路由来处理专门的请求

    app.get('/get',参数省略)
    //这里只接受/get路由
    //例如 baidu.com/get/ , baidu.com/get/2333.jpg
    //不接受 baidu.com/233/
    
    
    app.post('/post',参数省略)
    //这里只接受/post路由
    //例如 baidu.com/post/ , baidu.com/post/2333.jpg
    //不接受 baidu.com/233/
    
    

    路由也可以是某个文件

    app.get('/233.jpg',参数省略)
    //这里只接受/233.jpg路由
    //例如 baidu.com/233.jpg
    //不接受 baidu.com/233
    
    

    如果想让客户端访问服务器中一个文件夹里所有的文件
    实现一个简单的文件服务器
    可以使用 “use”方法

    app.use('/public', express.static('DataBase'));
    //当客户端提交GET /public/233.jpg请求
    //那么服务器会将本地路径下 DataBase/233.jpg发送给客户端
    
    

    有关express框架详细教程可参见菜鸟教程

  • 相关阅读:
    解决Maven下载速度缓慢问题
    IntelliJ IDEA 最新激活码
    Googel 浏览器 模拟发送请求工具--Advanced REST Client
    Firefox火狐 浏览器接口调试工具 JSON 格式化
    修复/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory问题
    解决Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid
    configure: error: You need a C++ compiler for C++ support.[系统缺少c++环境]
    解决编译apache出现的问题:configure: error: APR not found . Please read the documentation
    centos6 Linux安装redis 2.6.14
    Nginx+Tomcat负载均衡配置
  • 原文地址:https://www.cnblogs.com/prprpr/p/14878167.html
Copyright © 2011-2022 走看看