在linux下新建一个文件 如hello.js
用vi打开文件(编辑器随便)
在在文件中输入console.log('hello node.js');
完成后保存
在用node编译源文件,你将在控制台得到 hello node.js
这就是第一个node程序
显然大家都可以知道console必定包含了想标准输出写入的操作。
例如刚刚用的console.log,它是我们最常用的输出指令类似于c中的printf 、c++中的cout以及java中的System.out.println等
当然node也可以接受任意多个参数,支持%d、%s变量引用。
例如:
//新建一个consolelog.js
在文件中像c一样把printf改成console.log
console.log('%s : %d‘,’Age‘,25);
你就可以在控制台得到 Age : 25 (ps:是不是感觉和C一样用?)
-----------------------------------------------
node.js命令行工具
用node --help可以查看
前面提到过用node console.js直接晕洗脚本文件,还用一种输出hello node.js的方式 如:
$ node -e "console.log('hello node.js");"可以得到和上面一样运行node node.js的结果
我们可以把要执行的语句作为node -e的参数直接执行
使用node的RERL(read-eval-print loop即输入-求值-输出循环)模式
在终端输入node就会进入REPL模式
可以看到提示符变成了>。进入后就输入命令,按回车结束。node.js会解析并执行命令。
如果在REPL中执行一个函数,会显示这个函数的返回值,如果没有返回值的华会显示.当然如果你输入了错误的指令,REPL会立即显示错误输出调用栈。在任何时候连续两次ctrl+c会直接退出node.js的REPL模式
建立HTTP服务器
node.js将HTTP服务器这一层抽离,直接面向浏览器用户。
创建HTTP服务器实例:
//app.js
var http=require('http');
http.createServer(function(req,res){
res.writeHead(200,{'Content-Type':text/html'});
res.write('<h1>node.js</h1>');
res.end('<p>hello node.js</p>');
}).listen(3000);
console.log("HTTP Server is listening at port 3000.");
保存后大功告成
在终端输入node app.js
打开浏览器输入http://127.0.0.1:3000你将得到你第一个http服务器(ps:我这出现了问题,开启后访问一直连接不上,只用我在终端关闭的时候,页面才出来,刷新后又连接不上了。无伤大局,继续--come on)
介绍一个用于调试node.js的工具 supervisor,无重启刷新,解决开发中的调试问题
回调函数
实例:
//readfile.js
var fs=require('fs');
fs.readFile('file.txt','utf-8',function(err,data){
if(err){
console.error(err);
}
else{
console.log(data);
}
});
console.log('end.');
这里使用的是异步的方式,这种方式不容易被理解,从输出的结果就可以看出,终端先输出的是end.然后才输出的文件内容。这就是异步。
当然,我们也可以采取同步的方式
//readfileync.js
var fs=require('fs');
fs.readFileSync('file.txt','utf-8');
console.log(data);
console.log('end.');
这样的话输出的就先是文档的内容再输出end。相比较可以看出,定义回调函数在其中起了很大的作用。
从readFile的参数中我们可以看出,第一个参数是文件名,第二个是编码,第三个便是回调函数,当然此处的回调函数是一个匿名的函数,我们完全可以申明一个方法,将它作为readFile的第三个参数;
实例如:
//readfilecallback.js
function readFileCallBack(err,data)
{
if(err){
console.error(err);
}
else{
console.log(data);
}
}
var fs=requier('fs');
fs.readFile('file.txt','utf-8',readFileCallBack);
console.log('end.');
fs.readFile所做的工作是将异步的I/O请求发送给了操作系统,然后立即返回并执行后面的语句,执行玩以后进入时间循环监听时间。当fs收到I/O请求完成的事件时。时间循环会主动调用回调函数以完成后续工作。
//node.js中,并不是所有的API都支持提供了同步和异步版本。node.js不鼓励使用同步I/O.