javascript - Node.js 如何为 module.exports 编写的模块编写方法?
ringa_lee
ringa_lee 2017-04-10 15:27:38
[JavaScript讨论组]

比如给原型链写成的对象添加方法是Array.prototype.inArray = function(){};,那给module.exports编写的模块编写方法呢?

要求是要写在别的js文件里的,因为我想为express增加一些方法,又觉得写在express里不好。

ringa_lee
ringa_lee

ringa_lee

全部回复(3)
黄舟

我问着问着,突然想到以前利用module.exports做全局变量的原理,利用这个原理,似乎也能给module.exports的对象添加新的方法!以下是解决方案,不确定是否成功,有待晚上回去测试

a.js//需求是:在其他js文件里给这个a,添加新的方法

module.exports={a:function(){console.('a')}}

b.js//解决方法

var a = require('./a');
a.b = function(){console.log('b')}

page_index.js//某个路由js

var a = require('./a');
a.b();

在app.js引用过一次b之后,也许就可以了!晚上回去试试看!

=========================================
试过之后,发现可用,但是我想添加方法的对象是express.Router,因为express.Router居然是一个可实例化的对象,而且post/get等,是在这个对象的原型链中的,所以我写的对象也最好在其原型链中,所以实际中这样用还是不行的,b.js应该这样:

var express = require('express');
var router_proto = express.Router.__proto__;

router_proto.ajax = function(){
    var args = H.makeArray(arguments);//这个方法自己找吧,就是把arguments变成数组对象而已

    if(args.length==0)throw '参数数量不足';

    if(settings.env=='development'){ //settings是我用来全局保存当前设置的一个对象,自己根据自己的来改这里
        this.get.apply(this,args);
    }
    this.post.apply(this,args);
};

这样新增的方法就能使用this,可以轻松地访问express.Router的属性和方法了。然后在使用这个方法之前require一次这个js,之后就可以用了,用法跟get/post毫无区别,当环境不为development时,则不会处理get请求,蛮方便的。

阿神

如上讨论的,用middleware应该可以解决,只接受post的请求,你可以用req.method来判断:

app.use(function(req, res, next) {
  if (req.method === 'POST') {
    next()
  } esle {
    // do whatever
  }
});

// Define your router here
迷茫

你写的什么啊

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号