nodejs创建简易web服务器与文件读写的实例


Posted in NodeJs onSeptember 07, 2017

web服务器至少有以下几个特点:

1、24小时不停止的工作,也就是说这个进程要常驻在内存中

2、24小时在某一端口监听,如: http://localhost:8080, www服务器默认端口80

3、要能够处理基本的请求:如get, post

在node js中创建一台服务器非常的简单,因为node自带http模块,该模块可以帮助我们非常快速搭建一台web服务器,来处理一个简单的请求.

const http = require("http");
 var server = http.createServer(function(){
  console.log( '有人访问ghostwu的服务器' );
 });
 server.listen( 8080 );

第1行:导入node js内置的http模块

第2行: 利用http模块自带的createServer方法,创建一台服务器

第5行: 服务器在8080端口监听

然后切换到文件所在的路径,用node 运行这个文件( node + 文件名 ),然后在浏览器中输入( http://localhost:8080 )就可以看见控制台 打印出 '有人访问ghostwu的服务器'

nodejs创建简易web服务器与文件读写的实例

nodejs创建简易web服务器与文件读写的实例

但是这个服务器有个问题,只能在控制台输出信息,一般的服务器都会向浏览器输出信息,怎么做呢?

const http = require("http");
var server = http.createServer(function( req, res ){
 res.write( 'http://www.cnblogs.com/ghostwu/' );
 res.end();
});
server.listen( 6060 );

createServer的时候,为回调函数传递2个参数,第一个参数是处理请求的, 第二个参数是处理响应的,而我们要想把服务器的信息输出到浏览器,就需要调用res对象的write方法,然后调用end方法结束输出。在浏览器输入: localhost:6060,就能看到 http://www.cnblogs.com/ghostwu/

但是这台服务器,还是有个问题,只能处理http://localhost:6060 这样一个固定的端口和网址的请求, 其他的请求输出都是 看到同样的东西,而实际的请求却是:

http://localhost:8080 访问首页

http://localhost/404.html 访问404页面

http://localhost/1.html 访问1.html

。。。。

等等,不同的url请求,应该把对应的文件信息读出来,再输出到浏览器,我们先来做这个功能,不同的url显示不同的信息:

const http = require("http");
var server = http.createServer(function( req, res ){
 switch( req.url ){
  case '/1.html' :
   res.write( '1.html' );
   break;
  case '/2.html':
   res.write( '2.html' );
   break;
  default: 
   res.write( '404' );
 }
 res.end();
});

server.listen( 8080 );

这样就能处理 http://localhost:8080/1.html --> 显示1.html http://localhost:8080/2.html ---> 显示2.html 其他的请求都是显示404

最后,我们只需要,在对应的分支,把对应的文件内容读取出来就可以了,那么node js怎么读取文件呢?

var fs =require('fs');
fs.readFile("1.txt", function( err, data ){
 if( err ){
  console.log( err )
 }else {
  console.log( data.toString() );
 }
});

需要包含fs模块,这个模块就是处理文件的

readFile, 第一个参数,具体的文件路径和名称, 第二个参数回调函数有2个参数,一个是错误结果,一个是文件中的数据, 数据需要用toString方法转一下,否则就是字节数据,还有1.txt这个文件要确实存在.

写文件用writeFile这个api,b.txt如果不存在会自动创建一个,往b.txt文件中插入内容' this is b.txt'

const fs = require("fs");
fs.writeFile( "b.txt", "this is b.txt", function( err ){
 console.log( err );
} );

有了文件读写功能,我们就可以结合上面的代码,实现一个简易的get请求服务器

文件结构:

nodejs创建简易web服务器与文件读写的实例

server.js:

var http = require("http");
var fs = require("fs");
var server = http.createServer(function( req, res ){
 var fileName = './www' + req.url;
 fs.readFile( fileName, function( err, data ){
  if( err ){
   res.write( '404' );
  }else {
   res.write( data );
  }
  res.end();
 } );
}).listen( 8080 );

然后,在浏览器输入:

http://localhost:8080/index.html 就能读出www目录下面index.html的内容

http://localhost:8080/category.html 就能读出www目录下面category.html的内容

其他请求,输出404

以上这篇nodejs创建简易web服务器与文件读写的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
nodejs教程之异步I/O
Nov 21 NodeJs
NodeJS实现阿里大鱼短信通知发送
Jan 17 NodeJs
解析NodeJs的调试方法
Dec 11 NodeJs
nodejs个人博客开发第五步 分配数据
Apr 12 NodeJs
NodeJS创建最简单的HTTP服务器
May 15 NodeJs
nodejs制作爬虫实现批量下载图片
May 19 NodeJs
nodejs操作mysql实现增删改查的实例
May 28 NodeJs
nodejs之get/post请求的几种方式小结
Jul 26 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
nodejs基础之buffer缓冲区用法分析
Dec 26 NodeJs
Nodejs异步流程框架async的方法
Jun 07 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 NodeJs
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
Sep 06 #NodeJs
Nodejs进阶之服务端字符编解码和乱码处理
Sep 04 #NodeJs
Windows下使用Nodejs运行js的方法
Sep 02 #NodeJs
用nodejs实现json和jsonp服务的方法
Aug 25 #NodeJs
NodeJS收发GET和POST请求的示例代码
Aug 25 #NodeJs
Nodejs 和Session 原理及实战技巧小结
Aug 25 #NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 #NodeJs
You might like
基于PHP创建Cookie数组的详解
2013/07/03 PHP
PHP swfupload图片上传的实例代码
2013/09/30 PHP
PHP简单日历实现方法
2016/07/20 PHP
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
javascript浏览器窗口之间传递数据的方法
2015/01/20 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
2017/04/11 jQuery
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
Node.js中的不安全跳转如何防御详解
2018/10/21 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
35个Python编程小技巧
2014/04/01 Python
Python与Redis的连接教程
2015/04/22 Python
Python正则简单实例分析
2017/03/21 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
基于python实现微信好友数据分析(简单)
2020/02/16 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
应用化学专业职业生涯规划书
2014/01/22 职场文书
工作简历自我评价
2015/03/11 职场文书
JavaScript中关于预编译、作用域链和闭包的理解
2021/03/31 Javascript
Python何绘制带有背景色块的折线图
2022/04/23 Python