标签:node.js
Express是Nodejs标准的web开发框架
参考http://blog.fens.me/nodejs-express4/
先安装 npminstall -g express
再安装npm install -gexpress-generator #全局安装-g
检查安装结果 express -V# 检查express的版本
卸载(需要时使用)
npm uninstall-g express
参考
http://blog.csdn.net/JBBOY/article/details/25038299
http://jingyan.baidu.com/album/922554468a3466851648f419.html?picindex=1
express -enodejs-demo
进入项目目录,下载依赖库,构建项目。
cd nodejs-demo && npm install
npm start
效果如下图
nodejs-demo/
├──app.js 应用核心配置文件
├──bin 启动项目的脚本文件
├──node_modules 项目依赖库
├──package.json 项目依赖配置及开发者信息
├──public 静态文件(css,js,img)
├──routes 路由文件(MVC中的C,controller)
└──views 页面文件(Ejs模板)
其中scripts属性是用于定义操作命令的,可以非常方便的增加启动命令,比如默认的start,用npm start代表执行node ./bin/www命令。
//加载依赖库,原来这个类库都封装在connect中,现在需地注单独加载
varexpress = require(‘express‘);
varpath = require(‘path‘);
varfavicon = require(‘serve-favicon‘);
varlogger = require(‘morgan‘);
varcookieParser = require(‘cookie-parser‘);
varbodyParser = require(‘body-parser‘);
//加载路由控制
varroutes = require(‘./routes/index‘);
//varusers = require(‘./routes/users‘);
//创建项目实例
varapp = express();
//定义EJS模板引擎和模板文件位置,也可以使用jade或其他模型引擎
app.set(‘views‘,path.join(__dirname, ‘views‘));
app.set(‘viewengine‘, ‘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: {}
});
});
//输出模型app
module.exports= app;
www文件也是一个node的脚本,用于分离配置和启动程序。
查看./bin/www文件。
#!/usr/bin/envnode
/**
* 依赖加载
*/
varapp = require(‘../app‘);
vardebug = require(‘debug‘)(‘nodejs-demo:server‘);
varhttp = require(‘http‘);
/**
* 定义启动端口
*/
varport = normalizePort(process.env.PORT || ‘3000‘);
app.set(‘port‘,port);
/**
* 创建HTTP服务器实例
*/
varserver = http.createServer(app);
/**
* 启动网络服务监听端口
*/
server.listen(port);
server.on(‘error‘,onError);
server.on(‘listening‘,onListening);
/**
* 端口标准化函数
*/
functionnormalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
return val;
}
if (port >= 0) {
return port;
}
return false;
}
/**
* HTTP异常事件处理函数
*/
functiononError(error) {
if (error.syscall !== ‘listen‘) {
throw error;
}
var bind = typeof port === ‘string‘
? ‘Pipe ‘ + port
: ‘Port ‘ + port
// handle specific listen errors withfriendly messages
switch (error.code) {
case ‘EACCES‘:
console.error(bind + ‘ requires elevatedprivileges‘);
process.exit(1);
break;
case ‘EADDRINUSE‘:
console.error(bind + ‘ is already inuse‘);
process.exit(1);
break;
default:
throw error;
}
}
/**
* 事件绑定函数
*/
functiononListening() {
var addr = server.address();
var bind = typeof addr === ‘string‘
? ‘pipe ‘ + addr
: ‘port ‘ + addr.port;
debug(‘Listening on ‘ + bind);
}
参考
http://blog.fens.me/nodejs-express4/
【node.js学习】--(4)--Express4.x框架
标签:node.js
原文地址:http://blog.csdn.net/tianxuzhang/article/details/43993211