电子书:http://download.csdn.net/download/qfire/10232839
代码:https://github.com/EthanRBrown/web-development-with-node-and-express
第一章 初始Express
多页和混合的Web程序
Express是在Sinatra的启发下创建的。
Node的搭建和配置非常容易,但要让它在的生产环境中发挥出最优性能,进行调优也绝非易事,只不过是配置选项更简单,也更直接了。
IIS和Apache确实强大,并且它们的设计目标也是要榨取如今强大的硬件设施的最后一点性能。但那是需要付出代价的,即它需要相当专业的设置和调优才能榨取那种性能。
Node的生态系统:
授权:Node中常见的是MIT授权,允许把开发包放到闭源的软件中。其他授权,如GPL(你的项目必须也是GPL),Apache 2.0(需要对授权的组件做出声明)、BSD(需声明组件)
第二章 从Node开始
获取Node
用Node实现的简单Web服务器
第三章 省时省力的Express
脚手架:express借鉴RoR的做法,提供了一个生成脚手架的工具。HTML5 http://html5boilerplate.com/
旅行社网站:
$ npm init
$ npm install express --save
$ subl meadowlark.js
$ node meadowlark.js 推荐安装显示HTTP请求状态码和所有重定向的浏览器插件。Chrome中有Ayima的Redirect Path特别好用。
注意:路由和中间件的添加顺序至关重要。Express能根据回调函数中参数的个数区分404和500处理器。
var express = require('express');
var app = express();
//设置handlebars视图引擎
var handlebars = require('express3-handlebars')
.create({ defaultLayout: 'main' });
app.engine('handlebars', handlebars.engine);
app.set('view engine', 'handlebars');
//指定端口
app.set('port', process.env.PORT || 3000);
//静态资源中间件,创建路由,渲染文件并发送给客户端
app.use(express.static(__dirname + '/public'));
//增加路由 app.VERB帮我们做了很多工作:默认忽略大小写或\
app.get('/', function(req, res) {
res.render('home');
});
var fortunes = [
"Conquer your fears or they will conquer you.",
"Rivers need springs.",
"Do not fear what you don't know.",
"You will have a pleasant surprise.",
"Whenever possible, keep it simple.",
];
app.get('/about', function(req, res) {
var randomFortune = fortunes[Math.floor(Math.random()*fortunes.length)];
res.render('about', { fortunes: randomFortune });
});
//定制404页面。app.use是添加中间件的一种方法.
app.use(function(req, res) {
res.status(404);
res.end('404 - Not Found');
});
//定制500页面
app.use(function(err, req, res, next) {
console.error(err.stack);
res.status(500);
res.send('500 - Server Error');
});
app.listen(app.get('port'), function() {
console.log('Express started on http://localhost:' +
app.get('port') + '; press Ctrl-C to terminate.');
});
视图与布局:这里使用Handlebars框架,它不会对HTML进行抽象。
$ npm install --save express3-handlebars
$ mkdir views/layouts -p
$ subl views/layouts/main.handlebars
<!doctype html>
<html>
<head>
<titleMeadowlark Travel</title>
</head>
<body>
<header><img src="/img/logo.png" alt="Meadowlark Traval Logo"></header>
{{{body}}}
</body>
</html>
$ subl views/home.handlebars
<h1>Welcome to Meadowlark Traval</h1>
$ subl views/about.handlebars
<h1>About Meadowlark Traval</h1>
<p>Your fortune for the day:</p>
<blockquote>{{fortunes}}</blockquote>
$ subl views/404.handlebars
<h1>404 - Not Found</h1>
$ subl views/500.handlebars
<h1>500 - Server Error</h1>
视图和静态文件:Express靠中间件处理静态文件和视图。static中间件可以将一个或多个目录指派为包含静态资源的目录,其中的资源不经过任何特殊处理直接发送到客户端。你可以在其中放图片、CSS文件、客户端JS文件之类的资源。
$ mkdir public/img/logo.png
视图中的动态内容:视图真正的强大之处在于它可以包含动态信息。在about页面中添加fortunes变量
http://localhost:3000/about
第四章 工具
版本控制:git
$ git init
$ subl .gitignore
node_modules
*~
.DS_Store
$ git add -A
$ git commit -m "Initial commit."