文档章节

JS服务端系列-初级认识http和fs模块

透笔度
 透笔度
发布于 2015/12/11 17:26
字数 1496
阅读 104
收藏 3

提示1:根据系统的实际情况,下载nodejs http://nodejs.cn/download/ 然后如同软件一样安装。

提示2:一份参考手册 http://nodejs.cn/api/synopsis.html 。

提示3:看准下载的nodejs版本,注意手册是否一致。

 

一、node第一步,hello纸尿裤

我们可以开始学习nodejs了,从手册给出的案例我们做服务器的创建和“helloworld”的显示。

在nodejs的目录下创建一个文件夹,创建一个sever.js,拷贝参考手册的代码:

var http = require('http');
http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
}).listen(8124);

在cmd窗口,切换到存放sever.js的文件夹,执行命令:

node sever.js

在浏览器输入地址:http://localhost:8124/ 我们在浏览器就看见“hello world”了,到这里web服务器创建和显示内容就完成了。

=====个人理解:

1.请求到http这个东西

2.这个http东西可以调用创建服务器的方法

3.在创建方法里有回调方法,回调会接受req和res参数

4.res参数看意思是一个对象,可以调用写头部信息的方法,200的话结合ajax是回复状态成功,下面参数定义类型是text文本

5.res还可以调用end方法,这个结束方法的参数就是回复给用户的信息

6.创建服务器方法也应该是返回一个对象,对象有listen方法,看意思是监听方法,监听是8124,我们这里似乎不知道是什么,看见手册提示输入的地址,也就顿悟就是端口,一般默认的是8080,我们这里是8124。

结合我们前端js就算个人解读了,下面是真实要了解和知道的东西?

1.http到底是什么,请求方法require怎么用?????

2.req,res这回调里面的参数,有什么用,怎么实现前后交互?????

 

二、“http”模块的req和res初步认识

打开http介绍的手册页面 http://nodejs.cn/api/http.html

经过从上到下的阅读,我们总结出下面的代码:

var http = require('http');
var sever=http.createServer(function (request, response) {
    var regurl=request.url;
    response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
    response.write(regurl);
    response.end("获取用户请求地址!");
});
sever.listen(8124);

我们现在已经知道http是node为我们提供的web模块,调用方法可以创建服务器,并且在回调的req会携带客户的信息,res可以返回给用户信息。

用户->req->服务器->res->用户

我们代码获取到了用户的url地址,然后在应答时显示到用户界面,同样在应答时设置文档为html类型,编码为utf-8,这个设置必须在end之前,不然会失效。

现在我们设想我们的真是网站环境:

1.用户打开网站根目录“/”会看到首页面,这个页面我们假设放了一个a标签,用户点击a会连接到另一个页面,如登录页面。

代码编辑如下:

var http = require('http');
var sever=http.createServer(function (request, response) {
    var regurl=request.url;
    if(regurl=="/"){
        response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
        response.write('<a href="login">点击进入登录页面</a>');
        response.end("<div>欢迎访问</div>");
    }else if(regurl="/login"){
        response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
        response.write('<p>用户名:<input type="text"><br/>密码:<input type="password"><br/><br/><input type="submit" value="登录"></p>');
        response.end();
    };
});
sever.listen(8124);

ctrl+c终止,然后node sever.js,我们刷新查看页面,根目录下显示:

点击链接根据我们处理,login显示如下:

 

好像有点意思了,是不是?

不过我们发现一个非常严重的问题,我们显示的应该是一个html页面的内容,这里面的显示我们是以字符串形式编辑的,如果输出完整页面会非常的麻烦,我们如果能把html代码放在html文件,在这里面读进来,然后在显示在客户端,就显得整齐多了。

 

二“util”模块,常用工具的使用

我们上面知道了req对象,知道req.headers属性里以json的形式存放了用户的所有信息,我们如何把这些打印出来呢?

我们请求util模块,看下面代码:

var http = require('http');
var util = require('util');
var sever=http.createServer(function (request, response) {
    var regurl=request.url;
    if(regurl=="/"){
        response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
        response.write(util.inspect(request.headers));
        response.end("<div>欢迎访问</div>");
    }else if(regurl="/login"){
        response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
        response.write('<p>用户名:<input type="text"><br/>密码:<input type="password"><br/><br/><input type="submit" value="登录"></p>');
        response.end();
    };
});
sever.listen(8124);

这样我们就看到整个json格式的信息了,这个工具方法还是非常有用的

除了这种处理,工具模块还有大量类型判断方法,就不列举了,参考js的typeof和instanceof对类型的判断

还有就是util.inherts()如何实现继承,我们在js里通过call,apply和方法的prototype属性也可以实现继承

 

三、“fs”模块的文件打开读取

打开手册“fs”地址 http://nodejs.cn/api/fs.html

新建index.html,代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<a href="login">点击进入登录页面</a>
<div>欢迎访问</div>
</body>
</html>

新建login.html,代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<p>用户名:<input type="text"><br/>密码:<input type="password"><br/><br/><input type="submit" value="登录"></p>
</body>
</html>

我们根据页面手册,使用fs的 readFile方法

sever.js编辑后如下:

var http = require('http');
var fs = require('fs');
var sever=http.createServer(function (request, response) {
    var regurl=request.url;
    if(regurl=="/"){
        response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
        fs.readFile('index.html', 'utf8', function (err, data) {
            if (err) throw err;
            response.write(data);
            response.end("");
        });
    }else if(regurl="/login"){
        response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
        fs.readFile('login.html', 'utf8', function (err, data) {
            if (err) throw err;
            response.write(data);
            response.end("");
        });
    };
});
sever.listen(8124);

我们一定要注意书写嵌套,这个方法是异步处理,如果我们把res.end(),放在读取外面是错误的,会导致没有读取完提前结束。

重新运行后,预览。

© 著作权归作者所有

共有 人打赏支持
透笔度
粉丝 71
博文 128
码字总数 235452
作品 0
朝阳
前端工程师
私信 提问
分享一些书籍,方方面面,很多值得一读

分享一些书籍,方方面面,很多值得一读 编程书很多,各式各样的, 有的书讲实战,有的书讲内功, 主要分享一些自己收集且提升编程内功的书籍。 先介绍老本行的书 初级入门 JavaScript圣经之一...

街角盒饭
2017/04/01
0
0
Node学习随笔—http相关__http模块&路由

一:http模块 http模块是node的常用模块,可以用浏览器访问写的代码 1.引进http模块(核心模块不需要安装) 2.创建服务器(参数接受函数) 3.监听(知道访问,参数端口号,地址locallhost) 二...

Li_小点
10/08
0
0
Node.js---01、初识NodeJS和Node.js的HTTP服务器搭建

一、前言 我们先从以下几个方面在大体上认识一下Node.js: Node.js 是什么?==> 运行环境 是一个 可以运行 并加载 ES语法的 脚本运行环境 JS(ES5)、ES6、Common.js 语法 …… Node.js 可以加...

秋季长青
2017/11/06
0
0
NODE高级编程阅读笔记系列(一)

本篇涉及以下主题 node简单介绍 事件驱动编程 模块化 缓冲区处理 Node简单介绍 直接用官方的那句话: Node.js 是一种建立在Google Chrome's V8 引擎上的non-blocking(非阻塞),event-driven(...

可爱的圣诞老人
05/23
0
0
Angular Material串串学客户端开发 2 - Node.js模块加载机制Require()

题外话 首先,解一下博客标题,因为第一篇文章评论中,有人质疑离题很远,说了半天和Angular Material没有半毛关系。 1. 我的重心在后半句《串串学客户端开发》。这也是这一年以来,我自己的...

予沁安
2015/06/15
0
4

没有更多内容

加载失败,请刷新页面

加载更多

EOS官方钱包keosd

EOS官方钱包的名称是keosd,它负责管理你的私钥,并且帮你进行交易的签名。 不过不幸的是,keosd钱包对普通用户并不友好,它是一个命令行程序,目前还没有像以太坊的mist那样的图形化界面,而...

汇智网教程
42分钟前
2
0
ArrayList的实现原理以及实现线程安全

一、ArrayList概述 ArrayList是基于数组实现的,是一个动态的数字,可以自动扩容。 ArrayList不是线程安全的,效率比较高,只能用于单线程的环境中,在多线程环境中可以使用Collections.syn...

一看就喷亏的小猿
58分钟前
2
0
Netty 备录 (一)

入职新公司不久,修修补补1个月的bug,来了点实战性的技术---基于netty即时通信 还好之前对socket有所使用及了解,入手netty应该不是很难吧,好吧,的确有点难,刚看这玩意的时候,可能都不知道哪里...

_大侠__
昨天
5
0
Django简单介绍和用户访问流程

Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。 Django是一个开放源代码的Web应用框架,由Python写成。 Django遵守BSD版权,初...

枫叶云
昨天
8
0
Spring Cloud Stream消费失败后的处理策略(四):重新入队(RabbitMQ)

应用场景 之前我们已经通过《Spring Cloud Stream消费失败后的处理策略(一):自动重试》一文介绍了Spring Cloud Stream默认的消息重试功能。本文将介绍RabbitMQ的binder提供的另外一种重试...

程序猿DD
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部