这次我们不使用生成器、高级模块和中间件来搭建Express.js的应用。
一、手动创建流程
1.创建文件夹
2.NPM初始化和配置package.json
3.依赖声明
4.app.js文件
5.结合Jade
6.运行应用
二、创建文件夹
1.node_modules:Express.js和第三方模块的依赖都在这个目录下
2.views:Jade或者其他模板引擎文件
3.routes:包含请求处理程序的Node.js模块
4.db:MongoDB的种子数据和脚本
5.public:所有前端的静态文件,包括HTML、CSS、浏览器端的JavaScript和Stylus或者其他CSS框架文件
mkdir {public,public/css,public/img,public/js,db,views,views/includes,routes}
三、NPM添加项目中所有的元数据
手动创建package.json并书写内容,或者$npm init
命令生成初始package.json文件,然后书写内容
安装模块并添加到package.json文件中。
$npm install <package-name> --save
如:$npm install express@4.13.0 --save
四、依赖声明 npm install
书写package.json文件内容并执行$npm install
{
"name": "hello-world",//程序名称
"version": "0.0.1",//程序版本
"private": true,//私有的
"scripts": {//脚本
"start": "node app.js"//入口文件
},
"dependencies": {//依赖
"express": "4.1.2",
"jade": "1.3.1",
"mongoskin": "1.4.1",
"stylus": "0.44.0"
}
}
命令$npm install
执行完后,所有依赖模块都会安装到node_modules目录中
入口文件-“start”: node app.js指定了,
$node app.js
$node app
$node start
都可以启动他
如果我们给入口文件命名为index.js,那么可以执行$node 启动脚本
五、app.js文件
基于Express.js应用的主文件app.js一般由以下部分组成。
1.引入依赖
2.设置相关配置
3.连接数据库(可选)
4.定义中间件
5.定义路由
6.开启服务
7.在多核系统上启动cluster多核处理模块(可选)
===============华丽丽的分割线====================================
1.使用require()引入依赖
var express = require('express');
var http = require('http');
var path = require('path');
2.实例化对象(Express.js使用函数模式)
var app = express();
3.其中一种配置Express.js设置的方式是使用app.set(),使用键值对的形式
app.set('port', process.env.PORT || 3000);
//服务器应该监听请求的端口号
app.set('views', path.join(__dirname, 'views'));
//视图模板的绝对路径
app.set('view engine', 'jade');
//模板文件的扩展,例如:jade、html
4.中间件是Express.js框架中的骨干部分,有两种生成方式:
4.1.由外部第三方的模块定义:例如:来自Connect/Express.js,body-parser:app.use(bodyParser.json());的bodyParser.json
4.2.由应用本身或他的模块所定义,例如:app.use(function(req,res,next){…});
中间件是用来组织和复用代码的一种方式,函数中只有三个参数:request、response和next.
5.路由一般会放在中间件的后面,但是有些也放在前面,如:错误处理
在Express.js中,定义路由的方式在辅助程序app.VERB(url,fn1,fn2,...,fn)
中,
其中fn是用来处理请求的,
url是RegExp中的URL对象
VERB的值如下所示:
5.1.all:捕获每一个请求(所有方式的)
5.2.get:捕获GET请求
5.3.post:捕获POST请求
5.4.put:捕获PUT请求
5.5.del:捕获DELETE请求
(del和delete是别名:只要记住在JavaScript/ECMAScript中delete是一个有效的操作,这Node.js中也是一样。该操作会删除对象中的一个属性,例如:
delete books.nodeInAction)
app.all('*', function(req, res) {
res.render('index', {msg: 'Welcome to the Practical Node.js!'})
})
函数res.render(viewName, data, callback(error, html))
参数说明如下:(模板,数据,回调)
viewName:带有文件名扩展的模版名或者未设置扩展的模板引擎
data:一个由locals传递的可选对象,例如:在Jade中使用msg,我们需要有{msg:”…”}
callback:一个可选的函数,由错误或者HTML绘制完成后调用
res.render()不在Node.js的核心函数中,而是纯粹的Express.js函数,如果被调用,他会调用res.end()从而结束响应。
即在res.render()函数后面,中间件的链不会进行任何处理。
6.启动服务,由核心的http模块和他的createServer方法组成的。这个方法中,系统通过所有的设置和路由传递Express.js中的对象
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
===============华丽丽的分割线====================================