Express.js
来自tomtalk
expressjs
Express是一款基于Node.js的高性能高级Web框架。
- 相关资源
- 官网 http://expressjs.com/
- 想看文档教程神马的,请到官网:http://expressjs.com
- Express的源码托管在这里:https://github.com/visionmedia/express
- Express使用了Connect中间件,Connect的文档在这里:http://senchalabs.github.com/connect/
- 如果你想做单元测试,可以看看TDD框架Expresso:http://visionmedia.github.com/expresso/
- Express可选的Jade模板引擎也挺有趣的,它和haml是亲戚,像是个HTML预编译器:http://jade-lang.com/
- 说到haml,你也可以了解下sass,它像一个CSS预编译器:https://github.com/visionmedia/sass.js
- 不过同类产品中,我更喜欢不那么激进的less:https://github.com/cloudhead/less.js
- 用npm安装express
$cd /usr/local/lib $npm install express
- 按照程序猿和攻城狮们的惯例,来个Hello World:
var express = require('/usr/local/lib/node_modules/express'); var app = express.createServer(); app.get('/', function(req, res){ res.send('Hello World'); }); app.listen(3000);
- 使用mysql数据库的例子
//mysql var Client = require('/usr/local/lib/node_modules/mysql').Client; var client = new Client(); client.user = 'user'; client.password = 'password'; client.query('USE tiny_shop'); //express var express = require('/usr/local/lib/node_modules/express'); var app = express.createServer(); app.listen(3000); //action app.get('/', function(req, res){ res.send('Hello World'); }); app.get('/mysql', function(req, res){ client.query('SELECT * FROM tags', function selectCb(err, results, fields) { if (err) { throw err; } var data = ''; for (var i=0; i<results.length; i++) { var firstResult = results[i]; data += 'id: ' + firstResult['id']+'tag: ' + firstResult['tag']; } res.send(data); }); });
- 如何系统地学习 Express JS?
先从基础说起吧,Node.js使用javascript语言,所以JS的语法、特性及OO肯定要先掌握了,再学习node的api,特别需要领会事件驱动及异步编程的思想,这算是一个很大的转变,Node主要用于网络应用,所以网络编程内容多看下。
express是一个基于node的web框架(集成web服务器+mvc),当然其实不用框架,使用node自己弄一个web服务器和mvc框架也不是很麻烦(Node为网络而生,当然强大的不止这点),但是有优秀的express,封装了很多常用功能,推荐用。
学习express肯定是先把api过一遍,文档中的简单例子都试试,但这肯定是不够的,要深入了解还是得看源码,express主要依赖connect(基于node的http服务器框架,提供大量的中间件帮助用户构建强大灵活的web server),所以深入connect也是有必要的。
connect https://github.com/senchalabs/connect
使用express生成一个空白网站
- express命令的使用
Usage: express [options] Options: -h, --help output usage information -V, --version output the version number -s, --sessions add session support -e, --ejs add ejs engine support (defaults to jade) -J, --jshtml add jshtml engine support (defaults to jade) -h, --hogan add hogan.js engine support -c, --css add stylesheet support (less|stylus) (defaults to plain css) -f, --force force on non-empty directory
- 生成网站
$ express myapp create : myapp create : myapp/package.json create : myapp/app.js create : myapp/public create : myapp/public/javascripts create : myapp/public/images create : myapp/public/stylesheets create : myapp/public/stylesheets/style.css create : myapp/routes create : myapp/routes/index.js create : myapp/views create : myapp/views/layout.jade create : myapp/views/index.jade install dependencies: $ cd myapp && npm install run the app: $ node app
按照提示执行命令就可以了。打开http://localhost:3000/ 显示的是views/index.jade文件,有两行express的简短文字宣告。
express响应get示例
第一步:请参考下面的地址,把express跑起来。
第二步:编辑下面三个文件的内容,加入相应代码。
- app.js 处理路由
app.get('/signup', routes.signup);
- routes/index.js 获取get参数
exports.signup = function(req, res){ res.render('signup', { title: 'Express', username: req.query.username, email: req.query.email }); };
- views/signup.jade 输出get提交的值
extends layout block content h1 Node.js菜鳥筆記-註冊 <form id="signup" method="GET" action="/Signup"> <label>使用者名稱:</label><input type="text" id="username" name="username" /><br> <label>電子郵件:</label><input type="text" id="email" name="email" /><br> <input type="submit" value="註冊我的帳號" /><br> </form> h1 #{username} h1=email
怎样让express自动重新加载修改过的js文件?
如果能自动重加载js的话, 开发会快捷很多. 我现在每次都要先ctrl+c停止, 然后再启动node, 很不方便.
你需要的是:
- node-dev
- nodemon
- forever
具体参见:https://github.com/joyent/node/wiki/modules#wiki-restarting