轻松创建nodejs服务器(4):路由


Posted in NodeJs onDecember 18, 2014

服务器需要根据不同的URL或请求来执行不一样的操作,我们可以通过路由来实现这个步骤。

第一步我们需要先解析出请求URL的路径,我们引入url模块。

我们来给onRequest()函数加上一些逻辑,用来找出浏览器请求的URL路径:

var http = require("http");

var url = require("url");

function start() {

 function onRequest(request, response) {

  var pathname = url.parse(request.url).pathname;

  console.log("Request for " + pathname + " received.");

  response.writeHead(200, {"Content-Type": "text/plain"});

  response.write("Hello World");

  response.end();

 }

 http.createServer(onRequest).listen(8888);

 console.log("Server has started.");

}

exports.start = start;

好了,pathname就是请求的路径,我们可以用它来区别不同请求了,这样一来我们就可以对来自/start和/upload的请求使用不同的代码来处理。

接着我们来编写路由,建立一个名为router.js的文件,代码如下:

function route(pathname) {

 console.log("About to route a request for " + pathname);

}

exports.route = route;

这段代码什么都没干,我们先把路由和服务器整合起来。

我们接着扩展服务器的start()函数,在start()中运行路由函数,并将pathname作为参数传给它。

var http = require("http");

var url = require("url");

function start(route) {

 function onRequest(request, response) {

  var pathname = url.parse(request.url).pathname;

  console.log("Request for " + pathname + " received.");

  route(pathname);

  response.writeHead(200, {"Content-Type": "text/plain"});

  response.write("Hello World");

  response.end();

 }

 http.createServer(onRequest).listen(8888);

 console.log("Server has started.");

}

exports.start = start;

同时,我们会相应扩展index.js,使得路由函数可以被注入到服务器中:

var server = require("./server");

var router = require("./router");

server.start(router.route);

运行index.js,随便访问个路径,比如/upload,就会发现控制台输出,About to route a request for /upload.

这就意味着我们的HTTP服务器和请求路由模块已经可以相互交流了。

下一节我们将实现针对不同的URL请求给予不同的反馈。

NodeJs 相关文章推荐
跟我学Nodejs(一)--- Node.js简介及安装开发环境
May 20 NodeJs
nodejs获取本机内网和外网ip地址的实现代码
Jun 01 NodeJs
nodejs中使用monk访问mongodb
Jul 06 NodeJs
nodejs实例解析(输出hello world)
Jan 03 NodeJs
nodejs中模块定义实例详解
Mar 18 NodeJs
深入nodejs中流(stream)的理解
Mar 27 NodeJs
nodejs实现大文件(在线视频)的读取
Oct 16 NodeJs
nodejs取得当前执行路径的方法
May 13 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
Nodejs中使用puppeteer控制浏览器中视频播放功能
Aug 26 NodeJs
NodeJs crypto加密制作token的实现代码
Nov 15 NodeJs
NodeJs内存占用过高的排查实战记录
May 10 NodeJs
轻松创建nodejs服务器(3):代码模块化
Dec 18 #NodeJs
轻松创建nodejs服务器(2):nodejs服务器的构成分析
Dec 18 #NodeJs
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
Dec 18 #NodeJs
Nodejs实现多人同时在线移动鼠标的小游戏分享
Dec 06 #NodeJs
Nodejs实现的一个静态服务器实例
Dec 06 #NodeJs
nodejs中简单实现Javascript Promise机制的实例
Dec 06 #NodeJs
nodejs实现的一个简单聊天室功能分享
Dec 06 #NodeJs
You might like
php 多关键字 高亮显示实现代码
2012/04/23 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
PHP实现倒计时功能
2020/11/16 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
JQ实现新浪游戏首页幻灯片
2015/07/29 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
vue axios 二次封装的示例代码
2017/12/08 Javascript
微信小程序WebSocket实现聊天对话功能
2018/07/06 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
vue input输入框关键字筛选检索列表数据展示
2020/10/26 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
python验证码识别的示例代码
2017/09/21 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
基于python的列表list和集合set操作
2019/11/24 Python
Python文本处理简单易懂方法解析
2019/12/19 Python
Python如何实现邮件功能
2020/05/27 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
北京银河万佳Java面试题
2012/03/21 面试题
集体备课反思
2014/02/12 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
2015年宣传工作总结
2015/04/08 职场文书
暑期工社会实践报告
2015/07/13 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS