Node.js开发系列(五)
时间:2020-05-17
本文章向大家介绍Node.js开发系列(五),主要包括Node.js开发系列(五)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
上一节我们实现了简单的路由,这节我们实现更复杂的路由过程
统一管理
我们在server.js
初始化路由控制,启动脚本的模块。
var server = require('./start');
var router = require('./router');
var requestHandlers = require('./handlers');
var handler = [];
handler["/"] = requestHandlers.home;
handler["/show"] = requestHandlers.show;
handler["/upload"] = requestHandlers.upload;
server.start(router.route,handler);
console.log("Run on port 1337");
启动脚本
在server.js
最后,我们调用了start
模块,start
模块即start.js
文件。在start.js
文件中处理,代码如下
var http = require('http');
var url = require('url');
function start(route,handler) {
console.log("Starting~~");
function onRequest(req, res) {
var pathname = url.parse(req.url).pathname;
var content = route(pathname,handler);
if (content){
res.writeHead(200,{
"Content-Type":"text/plain"
});
res.write('OK');
res.end();
}else {
res.writeHead(404,{
"Content-Type":"text/plain"
});
res.write("404 not found");
res.end();
}
}
var port = process.env.port || 1337;
http.createServer(onRequest).listen(port);
console.log("Started!!");
}
exports.start = start;
这里的核心代码是调用router(pathname,handler);
这个方法,这个方法是在router
模块中实现。
调用路由对应的方法
router
模块中判断参数pathname
和handler
组合成的路径是否有实现。如果有,则调用相应的路由方法,router.js
代码如下
function route(pathname,handler) {
console.log("Route for path requested:" + pathname);
if (pathname == undefined) pathname="/";
if (handler){
if (typeof handler[pathname] === 'function'){
handler[pathname]();
return true;
}else {
console.log("No Method found for " + pathname);
return null;
}
}else {
console.log("No Method found in handler ");
return null;
}
}
exports.route = route;
多个路由方法
首先我们需要定义多个路由方法,为了方便统一的管理控制,我们将路由处理的方法都写在一个handlers.js
的文件中,首先定义三个方法,这里只是实现最简单的打印
function home() {
console.log("Request 'home' called.");
}
function show() {
console.log("Request 'show' called.");
}
function upload() {
console.log("Request 'upload' called.");
}
exports.home = home;
exports.show = show;
exports.upload = upload;
最后
我们在浏览器中输入http://127.0.0.1:1337/
和http://127.0.0.1:1337/show
,可以看到浏览器页面显示OK,命令行打印相应的log.
在项目中:
1.server.js预定义处理路由方法,然后调用启动服务器的方法(start.js)。
2.start.js负责启动服务,解析url传递过来的路径,将url传递给router.js。
3.router.js去判断路由是否正确,然后调用对应url的处理方法,处理方法实现在handlers.js。
4.handlers.js进行真正的路由处理。
这样,我们就手动实现了一个nodejs路由控制的示例。
原文地址:https://www.cnblogs.com/baimeishaoxia/p/12903988.html
- 用 Identity Server 4 (JWKS 端点和 RS256 算法) 来保护 Python web api
- asp.net core 2.0 查缺补漏
- SQL Server 性能优化之——T-SQL NOT IN 和 NOT Exists
- SQL Server 性能优化之——重复索引
- SQL Server 性能优化之——系统化方法提高性能
- C# 调用PowerShell方法
- 使用Visual Studio 2010 一步一步创建Powershell Module 和 Cmdlet
- [SQLServer大对象]——FileTable初体验
- JavaScript闭包,只学这篇就会了
- [数据库基础]——编码标准之格式
- [数据库基础]——编码标准之结构
- 2017前端开发手册三-前端职位描述
- [.NET自我学习]Delegate 泛型
- [数据库基础]——图解JOIN
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring全家桶之SpringData——Spring 整合Hibernate与Hibernate Jpa
- MyCat练手项目以及简单分页功能实现
- Redis在分布式项目中的应用
- 常见的Form表单提交方式
- 基于RPC实现服务的注册、发布和消费
- HttpClient技术
- JsonP------实现跨域请求
- ActiveMQ—基于Java的消息传递服务器
- SpringMVC知识体系搭建
- 你分得清MySQL普通索引和唯一索引了吗?
- 基于Dubbo的CRUD案例
- 在javaEE中,实现用户登陆功能的实现
- JavaEE中,实现登录时进行校验验证码的功能
- JavaEE中为删除数据操作与退出操作添加确认提示框
- JavaWeb中的实现页面跳转的同卵双胞胎兄弟——重定向与请求转发