文档章节

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

透笔度
 透笔度
发布于 2015/12/11 17:26
字数 1496
阅读 262
收藏 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(),放在读取外面是错误的,会导致没有读取完提前结束。

重新运行后,预览。

透笔度
粉丝 85
博文 128
码字总数 235452
作品 0
朝阳
前端工程师
私信 提问
加载中
请先登录后再评论。
记一次失败的Perl + Nginx + FastCGI 配置过程

这两天心血来潮,不知道为什么和 Perl + Nginx + FastCGI 配置 耗上了。但是失败了,记录如下: 1)安装Nginx 1.4.3 ,我的是WINDOWS 7 系统,修改配置文件如下: location ~ .(pl|cgi|perl)?...

通吃岛-低手哥
2013/10/27
1.8K
7
用vertx实现高吞吐量的站点计数器

工具:vertx,redis,mongodb,log4j 源代码地址:https://github.com/jianglibo/visitrank 先看架构图: 如果你不熟悉vertx,请先google一下。我这里将vertx当作一个容器,上面所有的圆圈要...

jianglibo
2014/04/03
4.4K
3
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
树莓派(Raspberry Pi):完美的家用服务器

自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...

异次元
2013/11/09
7.9K
8
在多个浏览器上运行脚本--Queen

假设你想和朋友们玩这么个游戏:你写下某个数字,然后让朋友们猜你写的是什么数字。你的朋友们将不断的给你一些猜测的数字,直到猜中为止。 现在想象你的朋友都是使用的浏览器,这个游戏就相...

匿名
2013/01/24
4.7K
1

没有更多内容

加载失败,请刷新页面

加载更多

Hacker News 简讯 2020-08-15

最后更新时间: 2020-08-15 04:01 Welders set off Beirut blast while securing explosives - (maritime-executive.com) 焊工在固定炸药的同时引爆了贝鲁特爆炸 得分:215 | 评论:209 Factor......

FalconChen
今天
24
0
OSChina 周六乱弹 —— 老椅小猫秋乡梦 梦里石台堆小鱼

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @小小编辑 :《MOM》- 蜡笔小心 《MOM》- 蜡笔小心 手机党少年们想听歌,请使劲儿戳(这里) @狄工 :腾讯又在裁员了,35岁以上清退,抖音看到...

小小编辑
今天
71
1
构建高性能队列,你不得不知道的底层知识!

前言 本文收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识。 你好,我是彤哥。 上一节,我们一起学习了如何将递归改写为非递归,其中,用到的数据结构主要是栈。 栈和队列...

彤哥读源码
今天
17
0
Anaconda下安装keras和tensorflow

Anaconda下安装keras和tensorflow 一、下载并安装Anaconda: Anaconda下载 安装步骤: 如果是多用户操作系统选择All Users,单用户选择Just Me 选择合适的安装路径 然后勾选这个,自动配置环境...

Atlantis-Brook
今天
15
0
滴滴ElasticSearch千万级TPS写入性能翻倍技术剖析

桔妹导读:滴滴ElasticSearch平台承接了公司内部所有使用ElasticSearch的业务,包括核心搜索、RDS从库、日志检索、安全数据分析、指标数据分析等等。平台规模达到了3000+节点,5PB 的数据存储...

滴滴技术
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部