nodejs 学习(2) 中间件

var connect=require(‘connect‘),
    morgan=require(‘morgan‘),//日志
    bodyparser=require(‘body-parser‘),
    session=require(‘cookie-sessions‘),
    users=require(‘./users‘),//测试数据
    server=connect();

    server.use(morgan(":method :url :res[content-type] :response-time"));//记录请求方法、URL、响应头与响应时间
    server.use(bodyparser.urlencoded({ extended: false }));
    server.use(bodyparser.json());
    server.use(session({secret: ‘my app secret‘}));

    server.use(function(req,res,next){//如果已登录
        if(‘/‘==req.url && session.logged_in){
            res.writeHead(200,{"Content-Type":"text/html"});
            res.end("Welcome back,<b>"+session["username"]+‘</b>.‘+‘<a href="/logout">logout</a>‘);
        }else{
            next();
        }
    });

    server.use(function(req,res,next){//未登录时显示表单
        if("/"==req.url && req.method=="GET"){
            res.writeHead(200,{"Content-Type":"text/html"});
            res.end([
                ‘<form action="/login" method="post">‘,
                ‘<fieldset>‘,
                ‘<legend>Please log in</legend>‘,
                ‘<p>User:<input type="text" name="user"></p>‘,
                ‘<p>Password:<input type="Password" name="password"></p>‘,
                ‘<button>Submit</button>‘,
                ‘</fieldset>‘,
                ‘</form>‘
            ].join(‘‘));
        }else{
            next();
        }
    });

    server.use(function(req,res,next){//登录成功
        if("/login"==req.url && "POST"==req.method){
            res.writeHead(200);
            if(!users[req.body.user] || users[req.body.user].password!==req.body.password){
                res.end(‘Bad username/password‘);
            }else{
                session.logged_in=true;
                session.username=users[req.body.user]["name"];
                res.end("Authenticated");
            }
        }else{
            next();
        }
    });

    server.use(function(req,res,next){//登出
        if("/logout"==req.url){
            session.logged_in=false;
            res.writeHead(200);
            res.end(‘Logged out‘);
        }else{
            next();
        }
    })

    server.listen(3000);

//users.json

{
    "tobi":{
        "password":"ferret",
        "name":"Tobi Holowaychuk"
    }
}
时间: 2024-10-09 00:45:25

nodejs 学习(2) 中间件的相关文章

Nodejs学习路线图

Reference: http://mp.weixin.qq.com/s?src=3&timestamp=1463322948&ver=1&signature=aIZC*rkx9fSa5Z0bQmJfN0bumnigT7UFSUmp1BvWxxEgAwyA8zeRcsDcGGkpOaGxge8FC*dz9PzGh5C0bpz5efM8ph146Lcqp29w7Ss3DrEtj3PVu1G2185kdi42NJzV1wxSuO*xjZ2X4giQnPwKtg== Node.js框架是

NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证

JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器.每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情.例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象.而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS就相应提供了fs.http等内置对象.E

[转载]Nodejs学习路线图——nodejs系列

从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏览器就基于V8,同时打开20-30个网页都很流畅.Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低.非常适合小型网站,个性化网站,我们自己的Geek网站!! 关于作者 张丹(Conan), 程序员Java,R,PHP,Java

nodeJs学习路线

转载自:http://blog.fens.me/nodejs-roadmap/ 前言 用Nodejs已经1年有余,陆陆续续写了48篇关于Nodejs的博客文章,用过的包有上百个. 和全部人一样,我也从Web开发開始.然后到包管理,再到应用系统的开发,最后开源自己的Nodejs项目.一路走来,Nodejs已经成为我做Web项目的标配.我非常愿意把原Java.PHP的Web系统向Nodejs迁移.由于1个人能够非常easy的完毕10个人的活了. 本文把我的学习和使用经验进行归纳总结,希望给新入门No

nodejs学习资料

NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. 每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情.例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象.而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS

[Todo] Nodejs学习及Spider实验(包括php入门学习、React入门学习)

/Users/baidu/Documents/Data/Interview/Web-Server开发 深入浅出Node.js-f46c http://blog.csdn.net/u012273376/article/details/52736906 利用nodejs做爬虫 http://www.runoob.com/nodejs/nodejs-callback.html nodejs学习之路 http://www.runoob.com/php/php-tutorial.html php学习之路

NodeJS学习之2:express版的Hello World

接着 NodeJS学习之1:express安装 的结果: 我们继续应用程序的编写. 新建一个 app.js 文件 $ touch app.js copy 进去这些代码 // 这句的意思就是引入 `express` 模块,并将它赋予 `express` 这个变量等待使用. var express = require('express'); // 调用 express 实例,它是一个函数,不带参数调用时,会返回一个 express 实例,将这个变量赋予 app 变量. var app = expre

nodeJs学习

nodejsStudy 阅读<nodejs开发指南>来学习node.js的一个github仓库. 仓库里面放了这本书的电子版以及书籍的源代码 还放了node.js的最新win32的版本 node-v0.10.29 x86.msi 最后就是studyCase文件夹,存放着自己阅读书籍然后敲下来的学习案例 nodeJs学习,布布扣,bubuko.com

nodejs学习四 Node.js NPM

什么是NPM? 不知道大家注意没有,windows平台下的Node.js安装包大小才区区4M多,真可以用短小精悍来形容它,作为一种编程语言,像java一个SDK 就几十M,为什么node.js的运行环境这么小呢?这其中的微妙之处在于,它拥有一个庞大的第三方软件库. 在Node本身提供的包(原生)中没有我们要实现的功能模块的时候,我们可以去寻找下是否已经有人实现了这种功能.毕竟重复造轮子这种事情,很多人都不想干. 去哪里寻找我们想要的包呢?如果你还不知道报的名字,你可以去https://www.n