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

 

posted @ 2019-05-13 16:58  ellenxx  阅读(710)  评论(0编辑  收藏  举报