首先,express是node下用于写路由的的一个框架,安装
npm install express
一个简单的使用app.js
var express=require('express')
var app=express()
var server=app.listen(port||3000) //开一个端口,默认3000
app.get('/',function(req,res){
res.send('hello,world!')
})
运行app.js,这时候打开浏览器,127.0.0.1/3000就能显示hello world
app.get('/',function(req,res){
//get主要用于客户端向服务器请求,因此一般写response
res.send()
})
app.post('/',function(req,res){
//post主要用于客户端提交数据给服务器
})
app.all('/',function(req,res){
//all可以处理任何get,post,delete,put
})
说说路由句柄
一个简单的
app.get('/example/a', function (req, res) {
res.send('Hello from A!');
});
具有回调函数的句柄
app.get('/example/b', function (req, res, next) {
console.log('response will be sent by the next function ...');
next();
}, function (req, res) {
res.send('Hello from B!');
});
这里next()方法就是回调
回调数组
先定义几个函数
var cb0 = function (req, res, next) {
console.log('CB0');
next();
}
var cb1 = function (req, res, next) {
console.log('CB1');
next();
}
var cb2 = function (req, res) {
res.send('Hello from C!');
}
//这里定义的app.get()函数,第一个参数是路由路径,第二个参数是一个数组[cb0,cb1,cb2],里面是三个函数。
app.get('/example/c', [cb0, cb1, cb2])
//console输出CB0,CB1 ,网页显示Hello from C!
这里就写res.render(),其他的感觉也不常用,具体就看官方API文档吧
语法
res.render(view [, locals] [, callback])
渲染一个视图,并把html传给客户端
locals: 本地定义的属性
callback:回调函数,返回的异常err和html
//官网上的例子
// 发送渲染的视图给客户端
res.render('index');
// 如果指定了回调函数,那么渲染的HTML必须显示的发送
res.render('index', function(err, html) {
res.send(html);
});
// 传送一个本地的变量给视图
res.render('user', { name: 'Tobi' }, function(err, html) {
// ...
});
app.set()
app.set(name, value)
将value设置为name,估计是为了方便使用吧,我是这么理解的
app.set('title', 'My Site');
app.get('title'); // "My Site"
app.js
var express=require('express')
var port=process.env.PORT||3001
var app=express()
app.listen(port,function(){
console.log('listen'+port)
})
app.set('env', 'production');
console.log('app.js', app.get('env'));//production
var routes = require('./routes/index');
app.use('/routes', routes);
./routes/index.js
var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
console.log(req.app.get('env'));//production
res.send(req.app.get('env')); //production
});
module.exports = router;
app.use()
难点来了,一直搞不明白的,上面的例子也是用了app.use,就从上面的代码说起吧,app.use()其实就相当于一个中间件。
app.use([path,] function [, function…])
第一个参数是路径名,第二个参数是函数
就说上面的例子,app.js里 app.use(‘/routes’, routes);
当客户端输入localhost:/routes 时,实则是跳转到 ./routes/index.js 去执行
所以app.use就是这个意思吧
app.use 加载用于处理http請求的middleware(中间件),当一个请求来的时候,会依次被这些 middlewares处理。
执行的顺序是你定义的顺序,比如文档上的例子:
var logger = require('morgan');
app.use(logger());
app.use(express.static(__dirname + '/public'));
app.use(function(req, res){
res.send('Hello');
});
这个就不会记录静态文件的日志,因为looger中间件在static中间件后面。
app.use(express.static(__dirname + '/public'));
app.use(logger());
app.use(function(req, res){
res.send('Hello');
});
之前在想express有什么大不了,不就是写路由嘛,现在感觉有些方法深入去研究还是很麻烦,唉,只能边做边学了。