npm和配置
Node Packaged Modules 简称NPM,是nodejs的包理器。
Express框架
express框架继承了web的http服务器的创建,静态文件管理,服务器的url请求处理,GET和POST请求分发,Session处理等功能。
- 全局安装express
$ npm install -g express-generator
(express-generator可以安装express框架的工程模板生成一个项目。) 进入任何目录执行
$ express app
如图所示: 下载依赖:
$ cd app && npm install
进入app文件夹,运行app.js启动项目
npm start
浏览器输入
http://127.0.0.1:3000
jade模板
jade是一款高性能、简洁易懂的模版引擎,jade是html的javascript实现。
安装jade:目录下执行$ npm install jade --save
- app应用下的jade模板文件index.jade
extends layout
block content
h1= title
p Welcome to #{title}
extends layout
在index.jade页面加载layout.jade- h1和p1分别表示html对应的
<h1></h1>
和<p></p>
,其后的值是标签内的DOM元素- #{title}是服务器Node.js传递的参数
- render API: res.render( ‘模板名’ , { 参数对象 });
//app/routers/index.js
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title:'Express'});
);
jade中的if、for案例
【1】 if条件判断语法
if ${name} == 'admin' p this is an admin else p this is not an admin
【2】 for循环语法
each:
var items = ["one", "two", "thress"]; each item in items li = item
for:
for user in users for role in users.roles li = role
forever模块
作用: 监控文件更改、自动重启等。
使用方法:
- 命令行中使用
- 在node.js编码中require forever模块种使用
全局安装
$ npm install forever -g
- 使用:
# 启动
forever start ./bin/www #最简单的启动方式
forever start -l forever.log ./bin/www #指定forever日志输出文件,默认路径~/.forever
forever start -l forever.log -a ./bin/www #需要注意,如果第一次启动带日志输出文件,以后启动都需要加上 -a 参数,forever默认不覆盖原文件
forever start -o out.log -e err.log ./bin/www #指定node.js应用的控制台输出文件和错误信息输出文件
forever start -w ./bin/www #监听当前目录下文件改动,如有改动,立刻重启应用,不推荐的做法!如有日志文件,日志文件是频繁更改的
# 重启
forever restart ./bin/www #重启单个应用
forever restart [pid] #根据pid重启单个应用
forever restartall #重启所有应用
# 停止(和重启很类似)
forever stop ./bin/www #停止单个应用
forever stop [pid] #根据pid停止单个应用
forever stopall #停止所有应用
# 查看forever守护的应用列表
forever list
socket.io模块
- 作用: 将WebSocket协议应用到所有的浏览器。
- 应用实例: 在线联网游戏、实时聊天、实施股票查看、二维码扫描登陆等。
- 安装
$ npm install socket.io
实例项目:
登录统计在线人数,服务端实时推送给客户端在线人数
因为代码挺长的 这里就不复制粘贴了,详细代码请看代码仓库的代码。
代码仓库(喜欢请star(๑•ᴗ•๑))注意:
报错:
http://127.0.0.1:8888/socket.io/1/?t=1404410309733 400 (Bad Request)
解决办法:应该是socket.io.js版本太低,客户端改成<script src="https://cdn.socket.io/socket.io-1.0.6.js"></script>
request模块
封装http请求方式: GET、POST、HEAD、DEL等
1. GET案例
//app_get.js
var http = require('http');
var server = http.createServer(function (req,res){
res.writeHead(200,{'Content-Type':'text/plain'});
res.end("hello world\n" + req.method);
}).listen(3000,"127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');
//request_get.js
var request = require("request");
request.get("http://127.0.0.1:3000", function(err, response, result){
console.log("get", result);
})
//执行node app_get.js
//执行node request_get.js
//输出: get hello wolrd\n GET
2. POST案例
//app_post.js
var http = require("http");
querystring = require("querystring");
var server = http.createServer(function (req,res) {
var postData = "";
/*接受客户端post的数据*/
req.addListener("data", function(postDataChunk) {
postData += postDataChunk;
})
/*数据接收完成后执行匿名回调函数*/
req.addListener("end", function() {
var postStr = JSON.stringfy(querystring.parse(postData));
res.writeHead(200,{'Content-Type':'text/plain'});
res.end(postStr + "\n" + req.method);
})
}).listen(3000,"127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');
//request_post.js
var request = require("request");
request.get("http://127.0.0.1:3000",
{form: {"name": "zula", "book": "node.js"}},
function(err, response, result) {
console.log("get", result);
})
//执行node app_post.js
//执行node request_post.js
//输出:{"name": "zula", "book": "node.js"} POST
Formidable模块
解决文件上传
案例
//app.js
var formiadable = require("formidable"),
http = require("http"),
util = require("util");
http.createServer(function(req, res) {
if (req.url == '/upload' && req.method.toLowerCase() == "post") {
//pase a file upload
var form = new formiadable.IncomingForm(); //new 一个form对象
//解析post数据
form.parse(req, function(err, fields, files) {
res.writeHead(200, {"content-type": "text/plain"});
res.write("received upload:\n\n");
//util.inspect 将json对象转化为字符串
res.end(util.inspect({fields: fields, files: files}));
});
return;
}
//show a file upload form
res.writeHead(200, {"content-type": "text/html"});
/*http相应html信息*/
res.end (
'<form action="/upload" enctype="multipart/form-data" method="post">' +
'<input type="text" name="title"/></br>' +
'<input type="file" name="upload" multiple="multiple"/></br>' +
'<input type="submit" value="Upload"/>' +
'</form>'
)
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');
运行结果:
撒花~~读书笔记真不容易写(┬_┬)