zoukankan      html  css  js  c++  java
  • node——服务器根据不同请求作出不同响应+响应html文件等文件

    在浏览器中,不同的请求应该作出不同的响应

    我们可以从请求req中的url获得请求的内容

    然后我们就可以通过判断请求的url来做响应

    代码如下:

    //根据用户的不同请求,服务器做出不同的响应
    //
    //1.加载http模块
    //
    var http=require('http');
    
    //2.创建http服务,监听
    http.createServer(function(req,res){
        //获取用户请求req.url
        //console.log(req.url);
        //结束响应
        //res.end();
    res.setHeader('Content-Type','text/plain;charset=utf-8');
        //通过req.url获取用户请求的路径,获得不同的响应
        if(req.url==='/'||req.url==='/index')
            res.end('hello index');
        else if(req.url==='/login')
            res.end('hello login');
        else if(req.url==='/list')
            res.end('hello list');
        else
            res.end('404');
    
    }).listen(8080,function(){
        console.log('http://localhost:8080');
    
    })

     如果需要响应html文件,需要有fs,path模块

    代码如下

    //根据用户请求不同,响应不同的html
    var http=require('http');
    //加载fs模块
    var fs=require('fs');
    //加载path模块
    var path=require('path');
    
    http.createServer(function(req,res){
    
    if(req.url==='/'||req.url==='/index')
            {
                //如果这里传utf-8,返回的data是字符串,但我们不需要将其转为字符串。因为我们读取的是二进制,我们不需要将二进制转为字符串再将字符串转为二进制
                fs.readFile(path.join(__dirname,'html','xx1.html'),function(err,data){
                        if(err)
                        {
                            console.log(err);
                        }
                        //把读取的html发送
                        res.end(data);//这里面不会乱码,因为html文件了已经有utf-8了
                })
            }
        else if(req.url==='/login')
            {
                fs.readFile(path.join(__dirname,'html','xx2.html'),function(err,data){
                        if(err)
                        {
                            console.log(err);
                        }
                        //把读取的html发送
                        res.end(data);//这里面不会乱码,因为html文件了已经有utf-8了
                })
            }
        else if(res.url==='/list')
            {
                fs.readFile(path.join(__dirname,'html','xx3.html'),function(err,data){
                        if(err)
                        {
                            console.log(err);
                        }
                        //把读取的html发送
                        res.end(data);//这里面不会乱码,因为html文件了已经有utf-8了
                })
            }
        else
            res.end('404');
    
    }).listen(9090,function(){
    console.log('http://localhost:9090');
    })

     如果响应的html文件里面有图片请求,例如

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    <img src="../pic/1.png" />
        
    </body>
    </html>

    这样是解析不了图片的

    因为在请求该html文件的时候,也请求了图片,请求图片的url如下图,而我们的判断中是没有url==='/pic/1.png'的,所以我们应该在代码中加上这个判断

    else if(req.url==='/pic/1.png')//要单独请求图片
            {
                fs.readFile(path.join(__dirname,'pic','1.png'),function(err,data){
                        if(err)
                        {
                            console.log(err);
                        }
                        res.setHeader('Content-Type','image/png');//要加请求头
                        
                        res.end(data);
                })
            }

     css文件也可以这样请求,但是我们实际上不可能每个请求都要写在代码里,这样十分低效,我们可以将这些文件存在一个或者几个文件夹内,然后通过路径拼接来实现

    //http加载
    var http=require('http');
    var path=require('path');
    var fs=require('fs');
    var mime=require('mime');
    http.createServer(function(req,res){
        //1.获取用户请求路径
        //req.url
        ///css/index.css
        ///2.获取public目录完整路径
        var publicDir=path.join(__dirname,'public');
        //3.根据public的路径和用户请求,最终获得完整路径
        var filename=path.join(publicDir,req.url);
        console.log(filename);
        //res.end('over');
        //4.根据文件路径去读取文件,如果读取到,就将文件返回给用户,如果读取不到,返回404
        fs.readFile(filename,function(err,data){
            if(err){
                res.end('文件不存在404');
            }else{
                //通过第三方模块minme,来判断不同资源对应的Content-Type类型
                //filemane只要有后缀进行
                res.setHeader('Content-Type',mime.getType(filename));
                //如果找到了用户要读取的文件,那么直接把该文件返回给用户
                res.end(data);
            }
        })
    }).listen(9090,function(){
        console.log('http://localhost:9090');
    })

    其中mime

  • 相关阅读:
    第八章 对象
    第七章 压缩列表
    第六章 整数集合
    Java中的Unsafe
    站在Java的角度看LinkedList
    Java内部类详解
    浅析Java中的final关键字
    ConcurrentHashMap
    阻塞队列
    线程池的使用和实现
  • 原文地址:https://www.cnblogs.com/ellen-mylife/p/10857621.html
Copyright © 2011-2022 走看看