完全适合初学者。新的工作时间为周二至周六。当然,工作之余还要继续学习。我希望这篇文章能解决你的问题:“我现在已经下载了Node.Js,我该怎么办?”原文网址:http://blog.modulus.io/absolute-beginners-guide-to-这篇nodejs文章的构成:上面的翻译和自己理解的一小部分。文章中提到的所有JS代码都经过测试、运行并产生正确的结果。什么是Node.js?关于Node.Js,需要注意一点:Node.js本身并不是像IIS、Apache那样的Web服务器,而是一个JavaScript运行环境。当我们需要搭建一个HTTP服务器时,可以借助Node.Js提供的库快速编写一个。InstallingNodeNode.js安装非常方便。如果您使用的是Windows或Mac,请转到此页面下载页面。我已经安装了Node,现在怎么办?以WINDOWS为例,一旦安装了Node.Js,您可以通过两种不同的方式调用Node。方法一:在CMD中输入node,进入交互模式,输入一行JS代码,Node.Js会执行并返回结果,例子:$node>console.log('HelloWorld');HelloWorldundefinedPS:Undefinedinthe前面的示例从console.log返回值。方法二:在CMD下输入节点文件名(当然需要先CD到这个目录下)。示例:hello.js下的代码:console.log('HelloWorld');$nodehello.jsHelloWorldDoingSomethingUseful-FileI/O使用纯Jsnative代码虽然有趣但不利于工程开发。Node.JS提供了一些有用的库(模块),下面是一个使用Node.js提供的库分析文件的例子:example_log.txt2013-08-09T13:50:33.166ZA22013-08-09T13:51:33.166ZB12013-08-09T13:52:33.166ZC62013-08-09T13:53:33.166ZB82013-08-09T13:54:33.166ZB5我们做的第一件事是读取文件的所有内容。my_parser.js//Loadthefs(filesystem)modulevarfs=require('fs');//读取文件内容intomemory.fs.readFile('example_log.txt',function(err,logData){//Ifanerroroccurred,throwingitwill//displaytheexceptionandendourapp.if(err)throwerr;//logDataisaBuffer,converttostring.vartext=logData.toString();});filesystem(fs的APIref)模块提供了一个函数,可以异步读取一个文件,完成后执行回调,内容以BufferReturning(一个字节数组)的形式存在,我们可以调用toString()函数进行转换到一个字符串。现在让我们添加解析代码。my_parser.js//Loadthefs(filesystem)module.varfs=require('fs');////Readthecontentsofthefileintomemory.fs.readFile('example_log.txt',function(err,logData){//Ifanerroroccurred,throwingitwill//displaytheexceptionandkillourapp.if(err)throwerr;//logDataisaBuffer,converttostring.vartext=logData.toString();varresults={};//Breakupthefileintolines.varlines=text.split('\n');lines.forEach(function(line){varparts=line.split('');varletter=parts[1];varcount=parseInt(parts[2]);if(!results[letter]){results[letter]=0;}results[letter]+=parseInt(count);});console.log(results);//{A:2,B:14,C:6}});AsynchronousCallbacks前面的例子中使用了异步回调,实现在节点。在Js编码中被广泛使用,原因是Node.Js是单线程的(可以通过一些特殊的手段变成多线程,但一般情况下真的没有必要这么做)。因此,需要各种非阻塞操作。这种非阻塞操作有一个非常大的优势:与为每个请求创建一个线程的WebServer相比。在高并发的情况下,Node.Js的负载要小很多。做一些有用的事情-HTTP服务器让我们运行一个HTTP服务器,只需从Node.js主页复制代码即可。my_web_server.jsvarhttp=require('http');http.createServer(function(req,res){res.writeHead(200,{'Content-Type':'text/plain'});res.end('HelloWorld\n');}).listen(8080);console.log('Serverrunningonport8080.');运行上面的代码后,你可以访问http://localhost:8080看看结果。上面的例子显然过于简单了,如果我们需要搭建一个真正的web服务器的话。我们需要能够检查请求的内容,呈现适当的文件,然后返回。好消息是Express已经这样做了。做一些有用的事情-ExpressExpress是一个简化开发的框架。我们执行npminstall来安装这个包。$cd/my/app/location$执行npminstallexpress命令后,Express相关的文件会放在application目录下的node_modules文件夹下。这是一个使用Express开发的示例:my_static_file_server.jsvarexpress=require('express'),app=express();app.use(express.static(__dirname+'/public'));app.listen(8080);$nodemy_static_file_server.js这将创建一个文件服务器。为了炒,我们在/public文件夹中放了一个“my_image.png”。我们可以在浏览器中输入http://localhost:8080/my_image.png来获取这张图片。当然,Express还提供了很多其他的功能。代码组织在刚才的例子中,我们使用了单个文件,但在实际开发中,我们会设计代码的组织方式。我们尝试重组原始文本解析器。parser.js//Parserconstructor.varParser=function(){};//解析指定的文本.Parser.prototype.parse=function(text){varresults={};//分解文件intolines.varlines=text.split('\n');lines.forEach(函数(行){varparts=line.split('');varletter=parts[1];varcount=parseInt(parts[2]);if(!results[letter]){results[letter]=0;}results[letter]+=parseInt(count);});returnresults;};//ExporttheParserconstructorfromthismodule.module.exports=Parser;关于这里的导出的含义请参考我的博客:Node.Js学习01:模块系统以及一些常用的NodeModule.my_parser.js//Requiremyne??wparser.jsfile.varParser=require('./parser');//Loadthefs(filesystem)module.varfs=require('fs');//读取文件中的内容intotomemory.fs.readFile('example_log.txt',function(err,logData){//如果发生错误,throwingitwill//displaytheexceptionandkillourapp.if(err)throwerr;//logDataisaBuffer,converttostring.vartext=logData.toString();//创建Parser对象的实例.varparser=newParser();//调用parse函数.console.log(parser.parse(text));//{A:2,B:14,C:6}});这样,文本解析的部分就被提取出来了。总结Node.js强大而灵活。
