node.js Web应用框架Express.js(一)

node.js Web应用框架ExPRess.js(一)

什么是Express.js

Express 是一个简洁而灵活的 node.js Web应用框架, 提供一系列强大特性帮助你创建各种Web应用,提供丰富的HTTP工具以及来自Connect框架的中间件随取随用,创建强健、友好的API变得快速又简单,Express 不对 node.js 已有的特性进行二次抽象,只是在它之上扩展了Web应用所需的功能。

开篇,这里就只做简单的介绍,整理一些有关express.js的资源,与大家一起学习

Express.js中文社区:http://expressjs.jser.us/

Express.js 中文入门指引手册:http://my.oschina.net/youdoce/blog/68476

Nodejs开发框架Express3.0开发手记–从零开始:http://blog.fens.me/nodejs-express3/

Expressjs中文平台:http://www.expressjs.com.cn/

Node.js 入门:https://cnodejs.org/getstart

csdn中博文expressjs教程:http://blog.csdn.net/chszs/article/details/8869655

Node.js开发框架Express4.x:http://blog.fens.me/nodejs-express4/

记住我们用node+express+bowser,是bower 进行下载依赖js需要先安装好git。

express启动文件,app.js:

// 加载依赖库,原来这个类库都封装在connect中,现在需地注单独加载var express = require('express'); var path = require('path');var favicon = require('serve-favicon');var logger = require('morgan');var cookieParser = require('cookie-parser');var bodyParser = require('body-parser');// 加载路由控制var routes = require('./routes/index');//var users = require('./routes/users');// 创建项目实例var app = express();// 定义EJS模板引擎和模板文件位置,也可以使用jade或其他模型引擎app.set('views', path.join(__dirname, 'views'));app.set('view engine', 'ejs');// 定义icon图标app.use(favicon(__dirname + '/public/favicon.ico'));// 定义日志和输出级别app.use(logger('dev'));// 定义数据解析器app.use(bodyParser.json());app.use(bodyParser.urlencoded({ extended: false }));// 定义cookie解析器app.use(cookieParser());// 定义静态文件目录app.use(express.static(path.join(__dirname, 'public')));// 匹配路径和路由app.use('/', routes);//app.use('/users', users);// 404错误处理app.use(function(req, res, next) {    var err = new Error('Not Found');    err.status = 404;    next(err);});// 开发环境,500错误处理和错误堆栈跟踪if (app.get('env') === 'development') {    app.use(function(err, req, res, next) {        res.status(err.status || 500);        res.render('error', {            message: err.message,            error: err        });    });}// 生产环境,500错误处理app.use(function(err, req, res, next) {    res.status(err.status || 500);    res.render('error', {        message: err.message,        error: {}    });});// 输出模型appmodule.exports = app;

项目启动代码也被移到./bin/www的文件,www文件也是一个node的脚本,用于分离配置和启动程序,源码

#!/usr/bin/env node   /** * 依赖加载 */var app = require('../app');var debug = require('debug')('nodejs-demo:server');var http = require('http');/** * 定义启动端口 */var port = normalizePort(process.env.PORT || '3000');app.set('port', port);/** * 创建HTTP服务器实例 */var server = http.createServer(app);/** * 启动网络服务监听端口 */server.listen(port);server.on('error', onError);server.on('listening', onListening);/** * 端口标准化函数 */function normalizePort(val) {  var port = parseInt(val, 10);  if (isNaN(port)) {    return val;  }  if (port >= 0) {    return port;  }  return false;}/** * HTTP异常事件处理函数 */function onError(error) {  if (error.syscall !== 'listen') {    throw error;  }  var bind = typeof port === 'string'    ? 'Pipe ' + port    : 'Port ' + port  // handle specific listen errors with friendly messages  switch (error.code) {    case 'EACCES':      console.error(bind + ' requires elevated privileges');      process.exit(1);      break;    case 'EADDRINUSE':      console.error(bind + ' is already in use');      process.exit(1);      break;    default:      throw error;  }}/** * 事件绑定函数 */function onListening() {  var addr = server.address();  var bind = typeof addr === 'string'    ? 'pipe ' + addr    : 'port ' + addr.port;  debug('Listening on ' + bind);}

写烂了的node例子:

var http = require("http"),    open = require("child_process");    console.log("启动httpserver服务");var server = http.createServer(function(req,res){    res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});    res.write("开始\n");    res.end("我来了");});server.listen(3000,"127.0.0.1");open.exec("start http://127.0.0.1:3000");console.log("3000端口。")
var net = require("net"),    open = require("child_process");console.log("启动httpserver服务");var server = net.createServer(function(req,res){    //设置请求编码    socket.write("Echo server \r\n");})

node 项目经常需要安装的模块在项目根目录进行安装:

npm install expressnpm install jadenpm install mongoosenpm install bower -gbower install bootstrap

经典教程:用 Express 4.0 重写《Node.js 开发指南》第5章的项目实例