栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

根据路由动态加载Node.js模块

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

根据路由动态加载Node.js模块

如果您知道脚本的位置,即您有一个初始目录(例如)

DIR
,则可以使用
fs
,例如:

server.js

var fs = require('fs');var path_module = require('path');var module_holder = {};function LoadModules(path) {    fs.lstat(path, function(err, stat) {        if (stat.isDirectory()) { // we have a directory: do a tree walk fs.readdir(path, function(err, files) {     var f, l = files.length;     for (var i = 0; i < l; i++) {         f = path_module.join(path, files[i]);         LoadModules(f);     } });        } else { // we have a file: load it require(path)(module_holder);        }    });}var DIR = path_module.join(__dirname, 'lib', 'api');LoadModules(DIR);exports.module_holder = module_holder;// the usual server stuff goes here

现在,您的脚本需要遵循以下结构(由于该

require(path)(module_holder)
行),例如:

user_getDetails.js

function handler(req, res) {    console.log('Entered my cool script!');}module.exports = function(module_holder) {    // the key in this dictionary can be whatever you want    // just make sure it won't override other modules    module_holder['user_getDetails'] = handler;};

现在,在处理请求时,您可以执行以下操作:

// request is supposed to fire user_getDetails scriptmodule_holder['user_getDetails'](req, res);

这应该将所有模块加载到

module_holder
变量。我没有测试它,但是它应该可以工作( 除了错误处理!!!
)。您可能想要更改此功能(例如,制作
module_holder
一棵树,而不是一级字典),但我想您会理解的。

此功能应该在每次服务器启动时加载一次(如果您需要更频繁地触发它,那么您可能正在处理动态服务器端脚本,这是一个绝妙的主意,恕我直言)。现在,您唯一需要做的就是导出

module_holder
对象,以便每个视图处理程序都可以使用它。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430704.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号