Node.js后端开发 - 进阶篇 #10 express框架之封装handler.js模块

2023-11-09

目录

一、前言

二、封装 handler.js 业务模块

步骤1:写业务模块 handler.js 

步骤2:路由模块 router.js 调用

步骤3:其他代码贴上

主模块app.js

配置模块 config.js

三、最终效果


一、前言

上一篇文章我们讲了相对安全的express路由模块的封装以及挂载路由的一些思路分析总结,详细可查看博文:Node.js后端开发 - 进阶篇 #9 express框架之路由模块的封装2(相对安全)这篇文章我们将介绍如何封装 handler.js 业务模块

二、封装 handler.js 业务模块

步骤1:写业务模块 handler.js 

上篇文章我们讲到路由模块的封装,但我们路由模块 router.js 文件只负责路由判断,不要写具体的业务处理代码。我们再新建一个 handler.js 来处理业务 


//业务模块

//暴露函数,并且需要传入req、res参数,
//才能处理相应的业务,向用户响应
module.exports.index = function (req, res) {
    res.send('这个是 handler.index 方法中的代码');
};

步骤2:路由模块 router.js 调用

写好上面的代码以后,我们需要在路由模块 router.js 里面进行调用,我们这样调用就行

router.get('/', function (req, res) {
    handler.index(req, res);
});

它有一种更简便的写法,可以这样写

router.get('/', handler.index);

router.js 的具体代码如下:


//路由模块:主要负责路由判断

//1. 创建一个 router 对象(router 对象既是一个对象,也是一个函数)
var express = require('express');
var router = express.Router();

//加载业务模块
var handler = require('./handler.js');

//2. 通过 router 对象设置(挂载)路由
// router.get('/', function (req, res) {
//     handler.index(req, res);
// });

// 理解的时候需要注意,不需要传req、res参数
// 因为 handler.index = function (req, res) { };
// 所以可以写成 handler.index
router.get('/', handler.index);
router.get('/index', handler.index);

//3. 返回 router 对象
module.exports = router;


步骤3:其他代码贴上

主模块app.js


// app.js 模块职责:负责启动服务

//1. 加载 express 模块
var express = require('express');
//加载 config.js 模块
var config = require('./config.js');
//加载路由模块
var router = require('./router.js');

//2. 创建 app 对象
var app = express();

//3. 启动路由
// 设置 app 和 router 相关联
// 这个 router,它既是一个对象也是一个函数
// 这个函数,它也是一个中间件
//app.use('/', router);
app.use(router);//与上面的等价

//4. 启动服务
app.listen(config.port, function () {
    console.log('http://localhost:' + config.port);
});

配置模块 config.js


// 配置模块: 主要职责是负责保存项目中的配置信息

module.exports = {
    port : 3000
};

三、最终效果

启动运行程序,然后我们在谷歌浏览器中输入地址:http://localhost:3000  或  http://localhost:3000/index

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js后端开发 - 进阶篇 #10 express框架之封装handler.js模块 的相关文章

  • 在 Internet Explorer 中使用什么来监视 jscript 内存使用情况

    我们正在调试 GWT 应用程序 在 Firefox 中运行正常 在 IE6 0 中开始运行正常 但一段时间后 它就会崩溃并开始爬行 经过一些测试后 我们怀疑存在一些内存问题 使用了太多内存 内存泄漏等 除了使用taskmanager和pro
  • 如何在没有 jQuery 的情况下删除 Javascript 中的元素

    我试图通过以下方式从 DOM 中删除 Div a 标签嵌套在其中 我想我正在寻找的是 jQuery 的纯 Javascript 版本 div remove 这是html设置 div a href Click me to remove the
  • .push() 将多个对象放入 JavaScript 数组中返回“未定义”

    当我将项目添加到beats数组然后console log用户时 我得到了数组中正确的项目数 但是当我检查 length 时 我总是得到 1 尝试调用索引总是会给我 未定义 如下所示 Tom beats 1 我想我错过了一些明显的东西 但这让
  • 如何使用有角度的材料创建卡片网格?

    我正在尝试使用 ng repeat 创建每行三张卡片的网格 我有一个普通的 javascript 对象数组附加到范围 下面的代码将为每张卡创建一个新行 div div
  • JavaScript 验证和 PHP 验证?

    我正在使用 jquery 验证插件来验证空表单 我还应该在 PHP 中检查一下以确保 100 正确吗 或者用 javascript 验证就可以了 谢谢 您应该始终在服务器上进行验证 如果用户以某种方式不使用 Javascript 提交表单
  • 如何使用 Greasemonkey 监视静态 HTML 页面的更改?使用哈希?

    我希望我的 Greasemonkey 脚本仅在其访问的静态页面具有与以前完全相同的内容时运行 现在我可以设置一个包含该页面哈希的变量 我正在寻找一种动态散列页面的方法 以便我可以将我的散列与生成的散列进行比较 关于如何即时实现散列的任何想法
  • JavaScript 中的 Promise 有什么意义?

    一个承诺是一个 可能现在可用 或将来可用 或永远不可用的值 来源 MDN 假设我有一个想要处理图片的应用程序 图片已加载 例如在算法在后台使用它之后 或某种其他类型的延迟 现在我想检查一下图片是否可以在future 通过使用承诺 而不是回调
  • 如何使用 Javascript 设置查询字符串

    有没有办法使用 javascript 设置查询字符串的值 我的页面有一个过滤器列表 单击该列表时 它将更改右侧的页内结果窗格 我正在尝试更新 url 的查询字符串值 因此如果用户离开页面 然后单击 后退 按钮 他们将返回到最后一个过滤器选择
  • onclick 事件中未调用函数

    我想在每个 YouTube 链接的末尾添加一些 HTML 以在 litebox 中打开播放器 到目前为止 这是我的代码 document ready function var valid url new RegExp youtube com
  • mongodb 聚合 - 累积字段的不同组值

    如果我有Player表格文件 name String score Int 我有Group文档 其中组代表玩家列表 groupName String players ObjectID 玩家可以属于多个组 我想做一个聚合Player文档 按以下
  • 如何始终将焦点保持在文本框中

    我创建了一个包含两个 div 的 HTML 页面 左侧的 div 页面的 90 是 ajax 结果的目标 右侧的 div 页面的 10 包含一个文本框 该页面的想法是在文本框中输入零件编号 通过条形码扫描仪 并显示与该零件编号匹配的绘图 显
  • 如何计算特定字符在字符串中出现的次数

    我正在尝试创建一个函数来查看数组中的任何字符是否在字符串中 如果是 有多少个 我尝试计算每一种模式 但是太多了 我尝试使用 Python 中的 in 运算符的替代方案 但效果不佳 function calc fit element var
  • 改变 JavaScript 中的顶部填充

    以下是我在 css 中设置顶部填充的方法 body font size font size px margin 0 padding 100px 0 20px 0 width 100 important 如何使用最简单的 javascript
  • 使用 Google 日历源时如何禁用 FullCalendar 中的活动链接?

    我正在使用 FullCalendar 库从 Google 日历加载日历中的事件 不幸的是 事件添加到日历后 它们是可点击的 当您点击该活动时 您会自动重定向到 Google 日历页面以查看该特定活动 或者如果您有足够的访问权限 则可以直接对
  • LeafleteachLayer函数不会迭代所有Layer

    使用 GeoJSON 数据数组创建一些标记 getJSON GetLocationsServlet function data L geoJSON data onEachFeature onEachFeature addTo mymap G
  • 如何从浏览器向服务器发送“页面将关闭”消息?

    我想向每个 html 文档添加一个脚本 JavaScript 该脚本向服务器发送两条消息 页面确实打开了 页面将关闭 此消息包含页面打开的时间 打开消息应在文档加载时 或加载完成时 发送 这是简单的部分 The close message
  • 使用javascript动态更新css内容

    需要将 css 更新为动态值 我不确定最好的方法是什么 div style zoom 1 div 缩放级别将根据窗口大小调整触发 应用程序将相应缩放 我将此应用程序加载到 cordova 中并让它在 iPAD 中运行 然后我意识到需要使用
  • 使用 Jade 评估自定义 javascript 方法 (CircularJSON)

    我想通过 Jade 将一个对象解析为客户端 JavaScript 通常这会起作用 script var object JSON parse JSON stringify object but my object is circular ht
  • 有没有办法使用 ko.observableArray 作为地图?

    有没有办法使用ko observableArray http knockoutjs com documentation observableArrays html像地图 字典一样 例如 var arr ko observableArray
  • Flot 库将 y 轴设置为最小值 0 和最大值 24

    如何将 y 轴设置在 0 到 24 的范围内 这是我的代码 j plot j placeholder d1 xaxis mode time min new Date 2010 11 01 getTime max new Date 2011

随机推荐