“ 享受独处时光”
周末的下雨天,这个光线刚刚好,一整天不出门简直太酥服~
connect内置中间件
—
Static中间件
挂载
?:让/my-images URL和名为/images的目录对应起来
server.use('/my-images' , connect.static('/path/to/images'));
maxAge
?:给文件设置缓存时效
server.use('/js' , connect.static('/path/to/bundles'
,{ maxAge : 100000000000}));
hidden
给如果是true,connect就会托管那些以(.)开始的UNIX文件系统中被认为是隐藏的文件。
server.use(connect.static('/path/to/resources'
,{ hidden : true}));
query中间件
使用query中间件,能够通过req.query对象自动获取地址上带的查询字符串:
挂载
?:url /blog-post?page=5
server.use(connect.query);
server.use(function(req,res){
// req.query.page = 5
})
logger中间件
logger中间件能将发送进来的请求信息和发送出去的响应信息打印到终端
它提供了四种日志格式:default、dev、short、tiny。
var connect = require('connect');
connect.createServer(
connect.logger('dev'),
function(req,res){
res.writeHead(200);
res.end('Hello world')
}
).listen(3000)
在终端执行:node index.js,然后在浏览器访问127.0.0.1:3000,终端:
dev是一种精准简短的日志格式,提供了行为方式及性能方面的信息。
body parse中间件
bodyParse功能类似物http模块的例子中我们使用qs解析请求的消息体;
?:处理上传
var server = connect(
connect.bodyParse(),
connect.static('static');
)
在static/文件夹中,创建一个index.html:
<form action="/" method="POST" enctype="multipart/form-data">
<input type="file"/>
<button>Send File!</button>
</form>
Session(会话)
会话系统,主要通过在浏览器中设置cookie来实现,该cookie信息随后在所有的请求信息中被带回到服务器。
connect也提供了简单的实现方式,我们创建一个简单的登录系统:
// 模块依赖
var connect = require('connect'),
users = require('./users');
var server = connect(
connect.logger('dev'),
connect.bodyParser(),
// session中间件需要操作cookie,所以在这里引入cookieParser中间件
connect.cookieParser(),
connect.session({secret : 'my all secret'}),
// 出于安全考录,在初始化session中间件的时候需要提供secret选项
// 将车用户是否登录,若已登录展示欢迎,若未登录则交给其他中间件
function(req,res,next){
if('/'==req.url && req.session.logged_in){
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
res.end(
'欢迎 <b>'+req.session.name + '</b>回来!'
+ '<a href="/logout"></a>'
);
}else{
next();
}
},
// 若用户未登录,切请求地址是’/‘,则展示表单
function(req,res,next){
if('/'==req.url && 'GET'== req.method){
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
res.end([
'<form action="/login" method="POST">',
'<fieldset>',
'<legend>请登录</legend>',
'<p>用户名:<input type="text" name="user"/></p>',
'<p>密码:<input type="password" name="password"/></p>',
'<button>登录</button>',
'</fieldset>',
'</form>'
].join(''))
}else{
next();
}
},
// 当提交表单时,若用户名密码错误则展示错误,否则展示成功
function(req,res,next){
if('/login'==req.url && 'POST'== req.method){
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
if(!users[req.body.user] || req.body.password != users[req.body.user].password){
res.end('<p>用户名或密码错误<p>')
}else{
// 在这里修改req.session对象,该对象在响应发出去时自动保存,无须手动处理
req.session.logged_in = true;
req.session.name = users[req.body.user].name;
res.end('<p>登陆成功<p>');
}
}else{
next();
}
},
// 若请求logout,则登出
function(req,res,next){
if('/logout'==req.url){
req.session.logged_in = false;
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
res.end('<p>已退出<p>');
}else{
next();
}
},
);
server.listen(3000);
然后创建json:
{
"Lin":{
"password":"123456",
"name":"Lin"
}
}
然后在终端执行:node login.js,在浏览器访问localhost:3000
输入用户名密码:
点击登录后:
再去访问localhost:3000:
访问localhost:3000/logout退出:
若输入错误密码:
呜呼,各位宝宝们,是不是还挺好玩的,咱们前端也能搞自己的服务器。这个简单的登录系统还凑合哈。你千万别手懒哈,一起来coding啊!
愿我们有能力不向生活缴械投降---Lin