node.js项目中安装express
npm install express
express可以使用set(setting,value),enable(setting)和disable(setting)方法来配置
下面是可以配置的变量:
env, trust proxy ,jsonp callback name, json replacer,json spaces, case sensitive routing,strict routing, view cache,view engine, views,
var express = require('express');
var app = express();
app.listen(80);
语法:
app.(path,[callback...],callback)
例子:
app.get('/',function(req,res){
res.send("Server Root");
});
app.post('/',function(req,res){
res.send("Save Page");
});
使用查询字符串,使用POST参数 使用正则表达式 使用定义的参数,
使用查询字符串:
var express = require("express");
var url = require('url');
var app = express();
app.get('/find',function(req,res){
var url_parts = url.parse(req.url,true);
var query = url_parse(req.url,true);
res.send('Finding Book:Author:' + query.author + 'Title: ' + query.title);
});
使用正则表达式应用路由参数
app.get(/^\/book\/(\w+)\:(\w+)?$/.function(req,res){
res.send('Get Book:Chapter: ' + req.params[0] + 'Page: ' +req.params[1]);
});
使用已定义的参数来应用路由参数
app.get('/user/:userid',function(req,res){
res.send("Get User: " + req.param("userid"));
});
为已定义的参数应用回调函数
app.apram('userid',function(req,res,next,value){
console.log("Request with userid: " + value);
next();
});
HTTPRequest对象的属性和方法如下:
originalUrl,protocol,ip,path,host,method,query,fresh,stale,secure,acceptsCharset(charset),get(header),headers。
相关方法如下:
get(header),set(header,value),set(headerObj),location(path),type(type_string),attachment([filepath])
res.status(xxx);
res.send(status,[body])
res.send([body])
res.json(status,[object])
res.json([body])
res.jsonp(status,[object])
res.jsonp([object])
res.sendfile('arch.jpg',
{maxAge:1,//24*60*60*1000,
root:'./views/'},
);
res.download(path,[filename],[callback])
res.redirect('/重定向地址')
var app = express();
app.set('views','./views');
app.set('view engine','jade')
app.engine('ejs',require('ejs').__express);
app.engine('html',require('ejs').renderFile);
express支持的中间件组件如下:
app.use('/',bodyParser());
app.get('./otherRoute',bodyParser(),function(req,res){
res.send('This request was not logged.');
});
var express = require("express");
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var app = express();
app.use('/',bodyParser());
app.use('/',cookieParser());
app.use('/',session());
var express = require('express');
var app = express();
app.get('/',function(req,res){
var id = req.query.id;
var score = req.query.score;
console.log(JSON.stringify(req.query));
res.send("done");
});
语法
express.static(path,[options]);
path参数指定路径,options中的可选项又 maxAge hidden redirect index
app.post('/',function(req,res){
});
cookie-parser中间件语法:
express.cookie-parser([secret])
在响应中设置cookie:
res.cookie(name,value,[options])
options中的属性: maxAge httpOnly signed path
代码例子
var express = require("express");
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.get('/',function(req,res){
console.log(req.cookies);
if(!req.cookies.hasVisited){
res.cookie('hasVisited','1',
{maxAge:60*60*1000,
httpOnly:true,
path:'/'});
}
res.send("Sending Cookie");
});
app.listen(80);
使用cookie-session 注意cookie-session在底层利用cookie-parser中间件,所以你需要先添加cookie-parser中间件
语法: res.cookie([options])
options参数可以设置的属性: key secret cookie proxy
为网站在全局范围内实现基本的HTTP身份验证
var express = require('express');
var basicAuth = require('basic-auth-connect');
var app = express();
app.listen(80);
app.use(basicAuth(function(user,pass){
return(user === 'testuser' && pass === 'test');
}));
为一个单独的路由实现基本的HTTP身份验证
var express = require('express');
var basicAuth = require('basic-auth-connect');
var app = express();
app.listen(80);
var auth = basicAuth(function(user,pass){
return(user === 'testuser' && pass === 'test');
});
app.get('/restricted',auth,function(req,res){
res.send('Welcome to the restricted section.');
});
基本HTTP身份验证的一个主要缺点是,只要整数被存储,登录就一直存在,这不是很安全。一个更好的方法是,实现自己的身份验证机制,并将其存储在一个你可以随时使之过期的会话中。
express内的session中间件对于实现会话的验证效果都非常好。session中间件附加了一个Session对象req.session到Request对象来提供会话功能。req.session对象上有如下所示的方法