JS服务端系列-初级认识http和fs模块
JS服务端系列-初级认识http和fs模块
透笔度 发表于2年前
JS服务端系列-初级认识http和fs模块
  • 发表于 2年前
  • 阅读 96
  • 收藏 3
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

摘要: nodejs学习

提示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(),放在读取外面是错误的,会导致没有读取完提前结束。

重新运行后,预览。

标签: nodejs
共有 人打赏支持
粉丝 52
博文 119
码字总数 228832
×
透笔度
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: