第一步、购买VPS,一般可以买一个月学习用,mac的同学略过这些,我买的是centos 5
uname -a //查看内核版本
lsb_release -a //查看CentOS发行版本号
file /bin/ls //查看处理器CPU型号和32位还是64位系统
getconf LONG_BIT //查看32位还是64位
第二步、更新软件
yum -y update 更新软件版本
yum -y groupinstall "Development Tools"
第三步、安装node和npm
wget https://nodejs.org/dist/v4.2.3 ... ar.gz --no-check-certificate
echo $PATH
vi .bash_profile,把bin目录加进去
source .bash_profile 永久性的加入
再echo $PATH检查一下好没有
第五步、测试
[root@uslos myabc]# node -v
v4.2.3
[root@uslos myabc]# npm -v
3.5.1
第六步、安装express
$ mkdir myapp
$ cd myapp
npm init
entry point: (index.js) 这一步的时候把默认的index.js转换成app.js
npm install express --save
第七步、在当前目录创建app.js,代码如下:
var express = require("express");
var app = express();
app.route("/")
.get(function(req,res,next){
})
.post(function(req,res,next){
})
.put(function(req,res,next){
})
.delete(function(req,res,next){
});
var server = app.listen(3000,function(){
var host = server.address().address;
var port = server.address().port;
console.log("listening at 3000");
});
第八步、关掉防火墙
service iptables stop
第九步、客户端访问,打开fiddler2
OK,基本上到这一步就可以玩了,我们需要熟悉的是几个核心概念:路由,中间件,模板引擎,调试,数据库集成 模板引擎你可以自定义一个自己的模板引擎
var fs = require('fs'); // this engine requires the fs module
app.engine('ntl', function (filePath, options, callback) { // define the template engine
fs.readFile(filePath, function (err, content) {
if (err) return callback(new Error(err));
// this is an extremely simple template engine
var rendered = content.toString().replace('#title#', ''+ options.title +'')
.replace('#message#', ''+ options.message +'');
return callback(null, rendered);
})
});
app.set('views', './views'); // specify the views directory
app.set('view engine', 'ntl'); // register the template engine
当然,你也可以用jade
先安装jade npm install jade --save
再设置 app.set('view engine', 'jade');
当然,如果不想自己手工的玩express,可以使用express应用生成器,express生成器生成的种子应用使用到的中间件如下:
├─┬ body-parser@1.13.3 用于解析客户端请求的body中的内容,内部使用JSON编码处理,url编码处理以及对于文件的上传处理.
│ ├── bytes@2.1.0 Utility to parse a string bytes (ex: 1TB) to bytes (1099511627776) and vice-versa.
│ ├── content-type@1.0.1 Create and parse HTTP Content-Type header according to RFC 7231
│ ├── depd@1.0.1 Deprecate all the things
│ ├─┬ http-errors@1.3.1
│ │ ├── inherits@2.0.1
│ │ └── statuses@1.2.1
│ ├── iconv-lite@0.4.11
│ ├─┬ on-finished@2.3.0
│ │ └── ee-first@1.1.1 return the first event in a set of ee/event pairs
│ ├── qs@4.0.0 A querystring parsing and stringifying library with some added security.
│ ├─┬ raw-body@2.1.5
│ │ ├── bytes@2.2.0
│ │ ├── iconv-lite@0.4.13
│ │ └── unpipe@1.0.0
│ └─┬ type-is@1.6.10
│ ├── media-typer@0.3.0
│ └─┬ mime-types@2.1.8
│ └── mime-db@1.20.0
├─┬ cookie-parser@1.3.5
│ ├── cookie@0.1.3
│ └── cookie-signature@1.0.6
├─┬ debug@2.2.0
│ └── ms@0.7.1
├─┬ express@4.13.3
│ ├─┬ accepts@1.2.13
│ │ └── negotiator@0.5.3
│ ├── array-flatten@1.1.1 把深层次的嵌套数组转换成一个一维数组
│ ├── content-disposition@0.5.0Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。Content-disposition其实可以控制用户请求所得的内容存为一个文件的时候提供一个默认的文件名,文件直接在浏览器上显示或者在访问时弹出文件下载对话框。
│ ├── escape-html@1.0.2
│ ├── etag@1.7.0
│ ├── finalhandler@0.4.0 钩子函数
│ ├── fresh@0.3.0
│ ├── merge-descriptors@1.0.0
│ ├── methods@1.1.1
│ ├── parseurl@1.3.0
│ ├── path-to-regexp@0.1.7
│ ├─┬ proxy-addr@1.0.10
│ │ ├── forwarded@0.1.0
│ │ └── ipaddr.js@1.0.5
│ ├── range-parser@1.0.3
│ ├─┬ send@0.13.0
│ │ ├── destroy@1.0.3
│ │ └── mime@1.3.4
│ ├── serve-static@1.10.0
│ ├── utils-merge@1.0.0
│ └── vary@1.0.1
├─┬ jade@1.11.0
│ ├── character-parser@1.2.1
│ ├─┬ clean-css@3.4.8
│ │ ├─┬ commander@2.8.1
│ │ │ └── graceful-readlink@1.0.1
│ │ └─┬ source-map@0.4.4
│ │ └── amdefine@1.0.0
│ ├── commander@2.6.0
│ ├─┬ constantinople@3.0.2
│ │ └── acorn@2.6.4
│ ├─┬ jstransformer@0.0.2
│ │ ├── is-promise@2.1.0
│ │ └─┬ promise@6.1.0
│ │ └── asap@1.0.0
│ ├─┬ mkdirp@0.5.1
│ │ └── minimist@0.0.8
│ ├─┬ transformers@2.1.0
│ │ ├─┬ css@1.0.8
│ │ │ ├── css-parse@1.0.4
│ │ │ └── css-stringify@1.0.5
│ │ ├─┬ promise@2.0.0
│ │ │ └── is-promise@1.0.1
│ │ └─┬ uglify-js@2.2.5
│ │ ├─┬ optimist@0.3.7
│ │ │ └── wordwrap@0.0.3
│ │ └── source-map@0.1.43
│ ├─┬ uglify-js@2.6.1
│ │ ├── async@0.2.10
│ │ ├── source-map@0.5.3
│ │ ├── uglify-to-browserify@1.0.2
│ │ └─┬ yargs@3.10.0
│ │ ├── camelcase@1.2.1
│ │ ├─┬ cliui@2.1.0
│ │ │ ├─┬ center-align@0.1.2
│ │ │ │ ├─┬ align-text@0.1.3
│ │ │ │ │ ├─┬ kind-of@2.0.1
│ │ │ │ │ │ └── is-buffer@1.1.0
│ │ │ │ │ ├── longest@1.0.1
│ │ │ │ │ └── repeat-string@1.5.2
│ │ │ │ └── lazy-cache@0.2.7
│ │ │ ├── right-align@0.1.3
│ │ │ └── wordwrap@0.0.2
│ │ ├── decamelize@1.1.1
│ │ └── window-size@0.1.0
│ ├── void-elements@2.0.1
│ └─┬ with@4.0.3
│ ├── acorn@1.2.2
│ └── acorn-globals@1.0.9
├─┬ morgan@1.6.1
│ ├── basic-auth@1.0.3
│ └── on-headers@1.0.1
└── serve-favicon@2.3.0
其中ee-first 这个很有意义的中间件,用于一组事件,第一个先触发了,就会把其他的全部事件清除还有finalhandler这个是在响应的最后一步执行的钩子函数。
网友评论