国瑞个人博客
首页 > 前端 > 使用Node搭建一个简单的Http服务器

使用Node搭建一个简单的Http服务器

使用Node搭建一个简单的Http服务器

 2019年03月28日 作者: 国瑞个人博客 274次浏览

开发HTTP服务器程序,需要使用到Node.js的http模块。

request 对象封装了HTTP请求,我们调用request对象的属性和方法就可以拿到所有HTTP请求的信息。
response 对象封装了HTTP响应,我们操作response对象的方法,就可以把HTTP响应返回给浏览器。

实现一个最简单的Web程序hello.js,它对于所有请求,都返回hello world!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
'use strict'  

//导入http模块
var http = require('http');

//创建http server 并传入回调函数

var server = http.createServer(function(request,response){
    // 回调函数接口request,response对象
    //获取http请求的method,url,
    console.log(request.method+' : ' + request.url);
    //将HTTP响应200写入response,同时设置Content-Type:text/html;
    response.writeHead(200,{'Content-Type':'text/html'});
    //将HTTP响应内容写入response;
    response.end('<h1>Hello,world!</h1>')
})

server.listen('8088');

console.log('Server is running at http:127.0.0.1:8088');

文件服务器
我们可以设定一个目录,然后让web程序变成一个文件服务器。

解析request.url中的路径,然后在本地找到对应的文件,把文件内容发送出去。

解析URL需要用到Node.js提供的url模块,用过parse()将一个字符串解析为一个url对象

1
2
3
4
5
'use strict';

var url = require('url');

console.log(url.parse('http://user:pass@host.com:8080/path/to/file?query=string#hash'));

结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
Url {
  protocol: 'http:',
  slashes: true,
  auth: 'user:pass',
  host: 'host.com:8080',
  port: '8080',
  hostname: 'host.com',
  hash: '#hash',
  search: '?query=string',
  query: 'query=string',
  pathname: '/path/to/file',
  path: '/path/to/file?query=string',
  href: 'http://user:pass@host.com:8080/path/to/file?query=string#hash' }

处理本地文件目录需要使用Node.js提供的path模块 ,它可以方便地构造目录:

1
2
3
4
5
6
7
8
9
10
'use strict';

var path = require('path');

// 解析当前目录:
var workDir = path.resolve('.'); // 自己文件当前的本地路径

// 组合完整的文件路径:当前目录+'pub'+'index.html':
var filePath = path.join(workDir, 'pub', 'index.html');
//  自己文件当前的本地路径/pub/index.html

使用path模块可以正确处理操作系统相关的文件路径。在window系统下,返回的路径类似于C:\Users\michael\static\index.html,这样,我们都就不用关心怎么拼接路径了。

实现一个文件服务器

1
2
3
4
5
6
7
8
var http = require('http');
var path = require('path');
var fs = require('fs');
var url = require('url');

//从命令行参数获取root目录,默认是当前目录:
var root = path.resolve(process.argv[2] || '.');
console.log('Static root dir:' + root);

//创建服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
var server = http.createServer(function(request,response) {
    //获取URL的path,类似'/css/bootstrap.css'
    console.log(request.url);
     var pathname = url.parse(request.url).pathname;
     //获取对应的本地路径,类似 '/srv/www/css/bootstrap.css'
     var filepath = path.join(root,pathname);
     console.log('root= '+root);
     console.log('pathname= '+pathname);
     console.log('filepath= '+filepath);
     //获取文件状态
     fs.stat(filepath,function(err,stat) {
         if(!err && stat.isFile()){  
            //判断没有出错,且文件存在
            console.log('200 '+ request.url);
            //发送200响应
            response.writeHead(200);
            //将文件流导入response
            fs.createReadStream(filepath).pipe(response);

         } else {
             //出错了或文件不存在
             console.log('404');
             response.writeHead(404);
             response.end('404 Not Found');
         }
     })
})

server.listen(8089);
console.log('Server is running at http://127.0.0.1:8089/');
百度已收录

点击快速分享:

以上就是国瑞前端个人博客带来的是《使用Node搭建一个简单的Http服务器》,感谢您的观看!

如果没有特殊的说明,本文即为国瑞前端博客原创(www.huanggr.cn),欢迎读者转载并保留本站版权!https://www.huanggr.cn/1357.html

「专业前端博客,如果觉得我的文章对您有用,请帮助本站成长」

赞( 48 ) 打赏

谢谢你请我吃鸡腿*^_^*

支付宝
微信
48

谢谢你请我吃鸡腿*^_^*

支付宝
微信

上一篇:

下一篇:

相关文章:

共有 0 条评论

博客简介

国瑞个人博客: https://www.huanggr.cn/,我们关注Web前端开发技术,web前端开发,移动前端开发,前端资讯,同时分享前端资源和工具等,期待你的参与,了解更多..

博主独立研发主题:

本站唯一QQ群

加入国瑞个人博客QQ群

本群为学习探讨群,主要和前端相关,欢迎广大前端(抱有学习目的均可)爱好者加入!广告请勿添加!

升级版本

web前端开发博客,基于vue脚手架制作的前端博客正在制作中,尽情期待,目前示例的代码位于此处

最新版本(尽请期待)-web前端开发博客

精彩评论

本站主要提供服务

二年web前端开发博客,本站专注提供web资源下载,技术问题解答,经验分享,也提供新手的web技术指导,二年前端个人博客,期待你的加入!

站点统计

  • 文章总数: 269 篇
  • 草稿数目: 50 篇
  • 分类数目: 26 个
  • 页面总数: 16 个
  • 评论总数: 216 条
  • 链接总数: 10 个
  • 标签总数: 104 个
  • 建站时间: 803 天
  • 注册用户: 659 人
  • 访问总量: 8780644 次
  • 最近更新: 2019年7月15日
-->