王志广的个人分享

学习Node.js

admin发表于2015-05-18  3,894次浏览 标签: 

Node.js是一个基于Chrome JavaScript运行时建立的平台。使用事件驱动,单线程,非阻塞I/O 模型。

Node.js可以运行在服务器上,通过使用npm框架,完全可以写出类似PHP、ASP等脚本语言能写出的网站,同时它简单,轻便,而且能够很好的去进行编辑,因为node.js是非阻塞I/O,所以操作文件效率很高,但是它不适合计算密集型网站。

如何运行Node.js
安装Node.js这里就不在多说,在windows下进入cmd,输入node 要执行的js文件。列如 node index.js就可以,别忘了路径。

如何使用Node.js,我这里通过自己写的例子来说一下,非使用npm框架。

这里是引入模块,参照Node.js手册,引入了http模块,就可以使用http模块下的方法。
var http = require(‘http’);
创建服务
server = http.createServer(function(req,res){
判断是否是GET传值
if(req.method==”GET”){
//res.write是输出里面的字符串,类似php中的echo
res.write(“<html><head><title>王志广的个人博客</title>” +
“<meta http-equiv=Content-Type content=’text/html;charset=utf-8′>”+
“<link rel=’Shortcut Icon’ type=’image/x-icon’ href=’http://www.wangzhiguang.com.cn/favicon.ico’ /></head><body>”);
获得访问的路径
url = req.url;
判断是否是首页
if(url==”/”||url==”/index.node”){
res.write(“<h3><center>欢迎访问我的node.js版本简单博客</center></h3>”+”<h4><center><a href=’list.node’>进入博客列表</a></center></h4>”);
res.write(“</body></html>”);
}else if(url==”/list.node”){
列表页中获得网络列表数据
http.get(“http://www.wangzhiguang.com.cn/wap_api/list.php”, function(response){
规定传输类型
response.setEncoding(“utf-8”);
得到的数据
var content = “”;
请求开始
response.on(‘data’,function(data){
由于node.js获得的是一个包一个包类型,需要把所有的数据并和。
content = content + data;
});
请求结束
response.on(‘end’,function(data){
解析JSON数据
var str = JSON.stringify(content);
var aaa = JSON.parse(str);
var jsonobj=eval(‘(‘+aaa+’)’);
res.write(“<ul>”);
把数据解析出来并输入到页面中
for(i=0;i<jsonobj.length;i++){
var con = “”+i;
res.write(“<li><a href=’/info.node?id=”+jsonobj[con][‘ID’]+”‘>”+jsonobj[con][‘post_title’]+”</a></li>”)
}
res.write(“</ul>”);
res.write(“</body></html>”);
由于Node.js获得数据是异步方式,所以把服务结束放在了请求数据结束中。
res.end();
});
}).on(‘error’, function(e){
res.end(“内部错误”);
});
}else if(url.indexOf(“info.node?id=”)>0){
var conids = url.split(“=”);
var conid = conids[1];
//判断是否有值
if(!conid){
res.end(“<h3>没有参数</h3></body></html>”);
}
//同理列表页面一样。
http.get(“http://www.wangzhiguang.com.cn/wap_api/info.php?id=”+conid, function(response){
response.setEncoding(“utf-8”);
var content = “”;
response.on(‘data’,function(data){
content = content + data;
});
response.on(‘end’,function(data){
var str = JSON.stringify(content);
var aaa = JSON.parse(str);
var jsonobj=eval(‘(‘+aaa+’)’);
res.write(“<h4><a href=’/list.node’>返回列表页</a></h4>”);
res.write(“<h3><center>”+jsonobj[0][‘post_title’]+”</center></h3>”);
res.write(“<div>”+jsonobj[0][‘post_content’].replace(/\r\n/g,”<br />”)+”</div>”);
res.write(“</body></html>”);
res.end();
});
}).on(‘error’, function(e){
res.end(“内部错误”);
});
}else{
res.write(“<h3><center>你访问的页面不在地球上,请去其他星球寻找!</center></h3>”);
res.end(“</body></html>”);
}
}else{
res.write(“本站没有需要post的数据”);
}
if(url==”/”||url==”/index.node”){
这个是服务结束,如果不存在,浏览器请求不会断开,会一直运行。
res.end();
}
});
启用服务器并开启8081端口
server.listen(8081);
这个是打印到cmd中数据,不是打印到浏览器中的。
console.log(“http start @8081”);

访问
http://localhost:8081
可以复制上面的代码,把里面的中文去掉就可以正常运行。
自己写的代码仅仅参考,如果要正式开发,最好还是使用npm框架开发。
使用npm框架开发,npm类似MVC,把逻辑和页面分开,同时呢他提供了很多的类库,可以使开发效率提高些,同时避免了一些Node.js不好的地方,比如获得网络数据,需要考虑服务什么时候结束等。

你可以发表评论引用到你的网站或博客,或通过RSS 2.0订阅这个日志的所有评论。
上一篇:
下一篇:
没有评论
我来说两句

  Ctrl+Enter