声明:在写nodejs代码的时候,很多模块可以封装保存起来,以后的项目都会用到。

1、路由模块

var url=require('url');

//封装方法改变res  绑定res.send()
function changeRes(res){
res.send=function(data){
res.writeHead(,{"Content-Type":"text/html;charset='utf-8'"});
res.end(data);
}
} //暴露的模块
var Server=function(){
var G=this; /*全局变量*/
//处理get和post请求
this._get={};
this._post={};
var app=function(req,res){
changeRes(res);
//获取路由
var pathname=url.parse(req.url).pathname;
if(!pathname.endsWith('/')){
pathname=pathname+'/';
}
//获取请求的方式 get post
var method=req.method.toLowerCase();
if(G['_'+method][pathname]){
if(method=='post'){ /*执行post请求*/
var postStr='';
req.on('data',function(chunk){
postStr+=chunk;
})
req.on('end',function(err,chunk) {
req.body=postStr; /*表示拿到post的值*/
G['_'+method][pathname](req,res); /*执行方法*/
})
}else{ /*执行get请求*/
G['_'+method][pathname](req,res); /*执行方法*/
}
}else{
res.end('no router');
}
} app.get=function(string,callback){
if(!string.endsWith('/')){
string=string+'/';
}
if(!string.startsWith('/')){
string='/'+string;
}
// /login/
G._get[string]=callback;
} app.post=function(string,callback){
if(!string.endsWith('/')){
string=string+'/';
}
if(!string.startsWith('/')){
string='/'+string;
}
G._post[string]=callback;
}
return app;
}
module.exports=Server();

2、直接摘抄,然后创建一个文件运行下面的代码

方式一:
    var http = require('http');
    var app = require('./express-route');
    http.createServer(app).listen('');     app.get('login',function (req,res) {
    console.log('login');
    res.end('login');
    })     app.get('register',function (req,res) {
    console.log('register');
    res.end('register');
    }) 方式二:
    var http = require('http');
    var url = require('url');
    var path = require('path');
    var app = require('./module/express-route');
    var ejs = require('ejs');
    http.createServer(app).listen('');     app.get('/',function (req,res) {
    var msg = 'route test';
    ejs.renderFile('练习/views/index.ejs',{msg:msg},function (err,data) {
    if(err){
    console.log(err);
    return false;
    }
    console.log(data);
     //服务器端有数据返回到客户端 这个时候必须用res.send()。
    //如果没有数据返回到客户端,res.send()和res.end()效果一样。
         res.send(data);
        })
    })

nodejs之路由的更多相关文章

  1. nodeJS实现路由功能

    前面的话 本文将使用NodeJS实现较复杂应用的路由功能 结构 项目结构如下 代码如下 功能 [router.js] // 加载所需模块 var http = require('http'); var ...

  2. nodejs动态路由

    主要功能:根据输入路由的不同,加载访问不同的HTML页面 在这里我不得不说webstorm真的是一个很棒的开发工具,我学习nodejs也是用的它. 文件目录: first_server.js: 首先我 ...

  3. NodeJS及路由

    1.基本介绍- http://nodejs.cn/api/ Node.js 是一个基于Chrome V8 引擎的JavaScript运行环境 Node.js使用了一个事件驱动.非阻塞式I/O的模型,使 ...

  4. nodejs添加路由route步骤详解

    首先,毋庸置疑, 新建一个基础express站点.建好之后, 有三个文件需要code(当然,三个步骤顺序随意). 下面以添加一个'/about'为例说明. 1. 在views文件夹里,新建一个jade ...

  5. nodejs基础 -- 路由

    我们要为路由提供请求的URL和其他需要的GET/POST参数,随后路由需要根据这些数据(URL.GET/POST参数)来执行相应的代码. 因此,需要查看HTTP请求,从中提取出请求的URL及GET/P ...

  6. nodejs express 路由并显示html以及访问静态资源设置

    var express = require('express'); var http = require('http'); var fs = require('fs'); var app = expr ...

  7. nodejs学习笔记<三>关于路由(url)

    在网站开发中,路由的设置非常关键.nodejs对路由处理封装了一个比较全面的模块. 来认识下url模块 1)在命令行(cmd)可以直接 node —> url 可直接查看url模块的所有方法. ...

  8. 前端跨域问题的总结&&nodejs 中间层的路由转发

    前后端交互的时候,跨域是避不开的问题. 总结就是如下: 1.Cors 我在做前后端分离的时候,会采用cors 的方法:便于其他源的调用接口,这个可以设置成任意的源头,也可以允许指定的源头. 下面的是n ...

  9. nodejs+express中设置登录拦截器

    在nodejs+express中,采用nodejs后端路由控制用户登录后,为了加强前端的安全性控制,阻止用户通过在浏览器地址栏中输入地址访问后台接口,在app.js中需要加入拦截器进行拦截: /*** ...

随机推荐

  1. IT经理工作职责

    IT经理工作职责:     1. 管理公司信息技术以及计算机系统.   2. 确保公司信息技术是可访问的并且配备了现有的可用的硬件和软件.   3. 监控并且维护公司信息技术并确保能够得到最大化的使用 ...

  2. Delphi PopupMenu组件

  3. [CF 1238F] The Maximum Subtree 树DP

    题意 给定一颗树,求这个树的最大子树,且这个子树是一个good-tree. good-tree的定义是:每个节点可以表示成一个数值区间,而树上的边表示两个点表示的数值区间相交. 题解 通过分析可以发现 ...

  4. 织梦网站dedecms防止挂马的思路

    DedeCms做为国内使用最为广泛使用人数最多的CMS之一,经常爆出漏洞,每个漏洞的爆出,影响都是一大片,轻则被人挂广告.弹框,重则服务器成为肉机,宝贵数据丢失.那么有什么办法可以提高DedeCms的 ...

  5. C#线程中LOCK的意义

    学习心得,为的是让新人能理解,高手直接绕~ lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区.如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放. 引用一句 ...

  6. dlerror和dlclose用法

    dlclose() 1. 包含头文件 #include<dlfcn.h> 2. 函数定义  int dlclose(void *handle) dlclose用于关闭指定句柄的动态链接库, ...

  7. JAVA笔记6-继承和权限控制

    1. (1)类的成员的权限修饰符有public,protected,private或default,限定其他对象对该类对象成员的访问权限. (2)class的权限修饰符只可以是public或defau ...

  8. plsql 连不上64位oracle客户端

    1)安装Oracle 11g 64位 2)安装32位的Oracle客户端( instantclient-basic-win32-11.2.0.1.0) 下载instantclient-basic-wi ...

  9. 《剑指offer》算法题第二天

    今日题目(分别对应剑指书3~9题): 数组中重复的数字 二维数组中的查找 替换空格 从尾到头打印链表 重建二叉树 二叉树的下一个节点 用两个栈实现队列 今日重点为1,2,5,6,后面会有详细的思路解析 ...

  10. 《python cookbook》学习笔记

    2016.5.3 第8章  类与对象 8.1 改变对象的字符串显示 __str__ 和 __repr__   %s 和 %r,提到了eval,我没有用过 8.2 自定义字符串的格式化  __forma ...