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获取本机内网和外网ip地址的实现代码
Jun 01 NodeJs
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
Sep 26 NodeJs
Nodejs从有门道无门菜鸟起飞必看教程
Jul 20 NodeJs
nodejs实现发出蜂鸣声音(系统报警声)的方法
Jan 18 NodeJs
nodejs服务搭建教程 nodejs访问本地站点文件
Apr 07 NodeJs
nodejs 终端打印进度条实例代码
Apr 22 NodeJs
详解nodeJS之路径PATH模块
May 31 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 NodeJs
基于nodejs res.end和res.send的区别
May 14 NodeJs
nodejs实现套接字服务功能详解
Jun 21 NodeJs
如何利用nodejs实现命令行游戏
Nov 24 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 JSON 数据解析代码
2010/05/26 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
php通过session防url攻击方法
2014/12/10 PHP
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
2017/01/15 Javascript
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
详细讲解vue2+vuex+axios
2017/05/27 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
2019/09/05 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
使用python实现baidu hi自动登录的代码
2013/02/10 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
深入了解Django中间件及其方法
2019/07/26 Python
如何基于Python批量下载音乐
2019/11/11 Python
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
德国户外商店:eXXpozed
2020/07/25 全球购物
搬家公司的创业计划书
2014/01/01 职场文书
创建省级文明单位实施方案
2014/02/27 职场文书
餐厅采购员岗位职责
2014/03/06 职场文书
活动策划求职信模板
2014/04/21 职场文书
上班离岗检讨书
2014/09/10 职场文书
统计工作个人总结
2015/03/03 职场文书
银行自荐信怎么写
2015/03/05 职场文书
污水处理保证书
2015/05/09 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
JavaScript原型链详解
2021/11/07 Javascript