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