Nodejs作为服务端Javascript。它的最大特点是采用异步式I/O与事件驱动的架构设计。对于高并发的解决方案,传统的架构是多线程模型,也就是为每个业务逻辑提供一个系统线程,通过系统线程切换来弥补同步式I/O调用时的时间开销。Node.js使用的是单线程模型,对于所有I/O都采用异步式的请求方式,避免频繁的上下文切换
下载地址:http://nodejs.org/download/
学习教程: Nodejs开发指南
以下以mac为例,下载Mac版的pkg,然后进行安装。
例1.简单应用
创建一个js,并用node运行它。helloworld.js内容为console.log("Hello World");
然后运行helloworld.js,命令如下:node helloworld.js
例2.web应用
创建一个server.js文件,内容为:
var http = require("http");
http.createServer(function(request,response){
response.writeHead(200,{"Content-Type":"text/plain"});
response.write("Hello World");
response.end();}).listen(8888);
然后启动服务:node server.js
例3.同步和异步读文件
bteki-MacBook-Pro:nodeFile b$ node readfile.js
end.
This is good girl.so you must...
bteki-MacBook-Pro:nodeFile b$ vi readfilesync.js
bteki-MacBook-Pro:nodeFile b$ cat 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.');
bteki-MacBook-Pro:nodeFile b$ node readfilesync.js
This is good girl.so you must...
end.
bteki-MacBook-Pro:nodeFile b$ cat readfilesync.js
var fs=require('fs');
var data=fs.readFileSync('file.txt','utf-8');
console.log(data);
console.log('end.');
=========================================================
1、由于nodejs是单线程,当主线程异常时,会导致整个进程挂掉。forever可以解决该问题,它
将确保永远运行。线程死亡时,会自动重启。
$ sudo npm install forever -g #安装
$ forever start app.js #启动
$ forever stop app.js #关闭
$ forever start -l forever.log -o out.log -e err.log app.js #输出日志和错误
相关网站:
https://github.com/nodejitsu/forever
http://www.bishen.org/content/25925993071
启动时报异常:
[root@test pushserver]# forever start -l forever.log -o out.log -e err.log debug.js
info: Forever processing file: debug.js
error: Cannot start forever
error: log file /root/.forever/forever.log exists. Use the -a or --append option to append log.
解决方法:
[root@test pushserver]# forever start -a -l forever.log -o out.log -e err.log debug.js
==============以下为Node.js开发指南学习======================
第三章 模块和包
1、Node.js提供了exports和require两个对象,其中exports是模块公开接口,require用于从外部
获取一个模块的接口,即获取模块的exports对象。
例:
bteki-MacBook-Pro:nodeFile b$ cat module.js
var name;
exports.setName=function(theName){
name=theName;
};
exports.sayHello=function(){
console.log('Hello '+name);
};
bteki-MacBook-Pro:nodeFile b$ cat getmodule.js
var myModule=require('./module');
myModule.setName('Dwen');
myModule.sayHello();
bteki-MacBook-Pro:nodeFile b$ node getmodule.js
Hello Dwen
第五章 使用Node.js进行web开发
1、安装Express框架
参考:http://www.zikercn.com/node/11
在安装时碰到以下问题:
解决方法把用户切到root再进行安装就解决了。
切换root用户命令为:sudo su
然后输入密码就可以了。
================================================================================
解决国内NPM安装慢的问题:
npm install -gd express --registry=http://registry.npm.taobao.org
可使用–registry参数指定镜像服务器地址,为了避免每次安装都需要--registry参数,可以使用如下命令进行永久设置:
npm config set registry http://registry.npm.taobao.org
安装bower依赖包:
bower install --allow-root
nodemon 的安装:
npm install -g nodemon
nodemon启动:
nodemon app.js