express框架搭建
2013-05-21 14:44 king0222 阅读(386) 评论(0) 编辑 收藏 举报express框架搭建
先看看一段代码:
1 var express = require('express'); 2 var partials = require('express-partials'); 3 var flash = require('connect-flash'); 4 var http = require('http'); 5 var path = require('path') 6 var routes = require('./routes'); 7 var setting = require('./settings'); 8 var mongodb = require('mongodb'); 9 //connect-mongo use to store session 10 var mongoStore = require('connect-mongo')(express); 11 12 var app = express(); 13 14 app.set('port', process.env.PORT || 3000); 15 app.set('views', __dirname + '/views'); 16 app.set('view engine', 'ejs'); 17 18 //flash是用来存储临时变量的 19 app.use(flash()); 20 //partials是用来解析视图模板的 21 app.use(partials()); 22 //默认图标 23 app.use(express.favicon()); 24 //请求参数的解析 25 app.use(express.bodyParser()); 26 //http请求的改写 27 app.use(express.methodOverride()); 28 //cookie解析 29 app.use(express.cookieParser()); 30 31 //开发环境下有日志功能 32 app.use(express.logger('dev')); 33 app.use(express.session({ 34 secret: setting.cookieSecret, 35 store: new mongoStore({ 36 db: setting.db 37 }) 38 })); 39 40 //app.use(routes(app)); 41 //if use this type,you can detach the router in separate file. 42 app.use(app.routes); 43 44 app.get('/', function(req, res, next){ 45 res.render('index.ejs', {title:'ken blog'}); 46 }); 47 48 app.use(express.static(path.join(__dirname, 'public'))); 49 //or app.use(express.static(__dirname + '/public')); 50 51 http.createServer(app).listen(app.get('port'), function(){ 52 console.log('server listen on port:' + app.get('port')); 53 });
引入express是必须的,自不用说,为了能够创建一个Http服务器,我们当然也需要引入http模块。
var express = require('express');
var http = require('http');
var app = express();
下面就是配置的问题
先说说视图部分,需要设置视图的存放位置,还是渲染视图的引擎;
app.set('views','./views');
app.set('view engine', 'ejs');//想用jade也可以换成'jade'.只要你想。
接下来是几个常用中间件。
app.use(express.bodyParser());//用来解析请求体信息
app.use(express.cookieParser());//用来解析cookie信息,若需要保存session,则这个是必须添加的
app.use(express.methodOverride());//这个是用来重写http请求方法的,很多服务器不提供put,delete这样一些http方法,因此需要重写方法。
再来看看路由如何设置:
app.use(app.routes);
这样设置了之后,你就可以直接在这里写路由控制了,比如:
app.get('/', function(req, res, next){});
但还有另一种方式,能够让我们把路由拆分出来放在一个单独的文件中:
app.use(routes(app));
然后在route.js中代码如下:
1 module.exports = function (app) { 2 app.get('/', function(req, res){ 3 }); 4 return app.router; 5 }
当然还有一种更为推荐的方式来创建路由:
我们在server.js中写入以下代码:
1 app.use(app.router); 2 3 // 路由会在user/的基础上 4 app.use('/user', require('./routes/user').middleware);
然后在routes/user.js中添加路由:
1 var express = require('express'); 2 3 var router = module.exports = new express.Router(); 4 5 router.get('/:foo', function(req, res, next) { 6 res.send(req.originalUrl + '\n'); 7 }); 8 9 router.post('/bar', function(req, res, next) { 10 res.send(req.originalUrl + '\n'); 11 });
在最后,创建服务器:
http.createServer(app).listen(app.get('port') || 3000,function(){});
以上这些代码应该能够创建一个能够用的框架了。
或许我们会涉及到聊天室一类的项目中,因此需要用到TCP协议的socket接口,socket.io为我们提供了一套简单易用的方式,直接参考http://socket.io该站点就可以快速入门。
这里简单介绍:
服务器端socket代码如下:
require('socket').listen(8080);//在express中,你可以直接listen(app);
1 io.socket.on('connection', function(socket){ 2 socket.emit('news', {name:'ken'}; 3 socket.on('my envet', function(data){ 4 console.log(data); 5 }); 6 });
在客户端,也是简单的使用emit和on事件而已。
1 <script src="/socket.io/socket.io.js"></script> 2 <script> 3 var socket = io.connect('http://localhost'); 4 socket.on('news', function (data) { 5 console.log(data); 6 socket.emit('my other event', { my: 'data' }); 7 }); 8 </script>
express框架给我们的代码书写提供了方便,不过我们让然需要去理解Nodejs的原生api,需要知道express的实现原理。express框架的生成,也就跟一些前端的js框架一样,封装了一些复杂的东西,以提供简便易用的接口而已。