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的子进程(child_process)调用系统命令的方法分享
Jun 05 NodeJs
NodeJS学习笔记之Connect中间件应用实例
Jan 27 NodeJs
nodejs 整合kindEditor实现图片上传
Feb 03 NodeJs
nodejs调用cmd命令实现复制目录
May 04 NodeJs
NodeJS使用formidable实现文件上传
Oct 27 NodeJs
详解Nodejs之npm&package.json
Jun 15 NodeJs
ubuntu编译nodejs所需的软件并安装
Sep 12 NodeJs
nodejs结合Socket.IO实现的即时通讯功能详解
Jan 12 NodeJs
nodejs acl的用户权限管理详解
Mar 14 NodeJs
详解Nodejs内存治理
May 13 NodeJs
深入理解NodeJS 多进程和集群
Oct 17 NodeJs
NodeJS配置CORS实现过程详解
Dec 02 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 日期时间处理函数小结
2009/12/18 PHP
PHP编码规范的深入探讨
2013/06/06 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
php面向对象程序设计入门教程
2019/06/22 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
捕获关闭窗口的脚本
2009/01/10 Javascript
JS 控制CSS样式表
2009/08/20 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
2011/04/27 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
2014/02/17 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
jquery实现数字输入框
2017/02/22 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
使用apifm-wxapi快速开发小程序过程详解
2019/08/05 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
对Python中range()函数和list的比较
2018/04/19 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
2018/12/05 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
三好学生先进事迹材料
2014/08/28 职场文书
个人授权委托书模板
2014/09/14 职场文书
解除租房协议书
2014/12/03 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
SQL注入详解及防范方法
2021/12/06 MySQL