轻量级简单Node.js框架SevenzJS

轻量级简单Node.js框架SevenzJS

与其说是一个框架还不如说这是一个Node.js的路由框架。目前实现的功能很简单——只是能对一定的路由进行解析并且执行。

感觉网上发布的大多都太繁琐或者有很多不需要的功能,所以自己定制了一个适合我自己的最简单的小框架。

我们所要做的就是去action目录中实现自己的各个js模块,路由能自己解析。

如你的actions/foo.js下面有一个bar函数,那么直接能通过

http://domain:port/foo/bar

来进行访问。

这里贴一下你的业务逻辑模块所需要实现的代码demo:

exports.action = function(action) {
    var self = { };
    var sAction = action;
self["index"] = function() {
    sAction.write("Hello world!");
}

return self;

}

以后每个URI的第一层相当于一个模块,而第二层相当于一个函数-。 -

东西虽小,主要是应公司的一个项目而生。项目很简单,根本用不到网页渲染,我所要做的只是通过Node.js查询数据输出Json字符串来让客户端获取而已,所以暂时没有模板模块计划。

不过具体情况要视以后情况而定了。项目昨天才开始实施的,目前仍在继续开发和完善中,不过有兴趣的童鞋可以fork下来自己试试。

欢迎fork~

https://github.com/XadillaX/SevenzJS


19 回复

轻量级简单Node.js框架SevenzJS

简介

与其说SevenzJS是一个完整的框架,不如说它是一个轻量级的Node.js路由框架。它的主要功能是解析特定的路由并执行相应的动作。对于那些觉得现有的框架过于复杂或包含不必要的功能的人来说,SevenzJS可能是一个不错的选择。

使用场景

SevenzJS适用于那些只需要处理简单的路由和动作,而不涉及复杂的网页渲染的应用场景。例如,你可能需要通过Node.js查询数据库并将结果以JSON格式返回给客户端。

实现原理

SevenzJS的核心在于其路由解析能力。你只需在action目录下创建相应的JavaScript模块,并定义一些动作函数。SevenzJS会根据请求的URL路径自动解析并调用对应的模块和函数。

示例代码

  1. 创建路由模块 假设你希望在actions目录下创建一个名为foo.js的模块,并在其中定义一个名为bar的动作函数:

    // actions/foo.js
    exports.bar = function(req, res) {
        res.writeHead(200, {'Content-Type': 'application/json'});
        res.end(JSON.stringify({message: "Hello from bar!"}));
    }
    
  2. 路由解析与调用 在主应用文件中,你可以设置路由解析规则,使http://domain:port/foo/bar能够匹配到foo.js中的bar函数:

    const http = require('http');
    const path = require('path');
    const fs = require('fs');
    
    const actionsDir = path.join(__dirname, 'actions');
    
    const server = http.createServer((req, res) => {
        const urlParts = req.url.split('/');
        const moduleName = urlParts[1];
        const actionName = urlParts[2];
    
        if (moduleName && actionName) {
            const modulePath = path.join(actionsDir, `${moduleName}.js`);
            if (fs.existsSync(modulePath)) {
                const module = require(modulePath);
                if (module[actionName]) {
                    module[actionName](req, res);
                } else {
                    res.writeHead(404, {'Content-Type': 'text/plain'});
                    res.end('Action not found');
                }
            } else {
                res.writeHead(404, {'Content-Type': 'text/plain'});
                res.end('Module not found');
            }
        } else {
            res.writeHead(400, {'Content-Type': 'text/plain'});
            res.end('Bad request');
        }
    });
    
    server.listen(3000, () => {
        console.log('Server is running on port 3000');
    });
    

运行步骤

  1. 克隆仓库:
    git clone https://github.com/XadillaX/SevenzJS.git
    cd SevenzJS
    
  2. 安装依赖:
    npm install
    
  3. 启动服务器:
    node app.js
    
  4. 访问路由: 打开浏览器访问http://localhost:3000/foo/bar,你应该能看到返回的JSON字符串。

总结

SevenzJS 是一个轻量级的Node.js路由框架,适用于需要简单路由处理的应用。通过在actions目录下定义模块和动作函数,可以轻松地实现路由解析和动作调用。如果你有类似的需求,不妨试试这个小巧的框架。


模板就是蛋疼,本来是html的,还要翻译成jade/ejs 最后node耗cpu再翻译成html

今天初步实现了MongoDB的阻塞模式。

因为有时候阻塞模式实在是太常用到了,包括我的这个框架,如果不阻塞的话,内容根本输不出,因为非阻塞那个地方执行完的时候早就已经输出完了。

如果需要用到MongoDB的阻塞模式的话,可以参考下我的代码喔~

今天实现了MySql的shell类。也是同步阻塞模式的。

欢迎fork~

什么东西都阻塞的话, nodejs没有任何的优势, 基本跟坨屎一样, 我基本不用阻塞…

get/post怎么区别呢?

什么意思?

哈 类似php mvc框架

MysqlConnectionQueued.prototype = new bindings.MysqlConnection();
                                              ^
TypeError: Cannot read property 'MysqlConnection' of null

这是什么情况

var     mysql = require('mysql-libmysqlclient');

也是报同样的错误,是不是缺什么驱动程序?

简单跟express pk了一下 ab -n 1000 -c 60 http://192.168.83.128:5555/index SevenzJS 71.63 rps express3 94.17
可能是输出日志影响性能了,在setting.js里没有找到关闭日志的选项

如果actions也能象模板那样动态载入,这样就跟php一样了,改了代码就不用重启服务器了

我在这之前玩的是ThinkPHP,所以你懂得-。 -

或者这个东西要你自己再npm一遍?因为貌似他要npm下来之后他自己自动编译一遍的。

-. - 不好意思,没考虑到关闭日志。

对了,你有装mysql-devel么?这个是在centos下的名字,在deb可能是libmysql-dev还是libmysql来着,稍微找一下不?

没必要阻塞,回调就行了。本身就是单进程的东西。阻塞了,其他就不能动了。

windows的话我也不清楚,可能是mysql的driver?在mysql官网应该又载的吧,libmysql

轻量级简单Node.js框架SevenzJS

简介

SevenzJS 是一个非常轻量级且简单的 Node.js 路由框架。它的主要功能是解析路由并执行相应的操作。相比于其他复杂的框架,它更适合用于需要快速实现小型项目的场景。

使用方法

假设你的项目结构如下:

project/
├── actions/
│   └── foo.js
├── server.js

actions 目录下创建你的业务逻辑模块,例如 foo.js,内容如下:

// actions/foo.js
exports.action = function(action) {
    var self = { };
    var sAction = action;

    self["index"] = function() {
        sAction.writeHead(200, {'Content-Type': 'text/plain'});
        sAction.end('Hello world!');
    }

    return self;
}

路由解析

server.js 中配置路由解析:

const http = require('http');
const fs = require('fs');
const path = require('path');

const server = http.createServer((req, res) => {
    const url = req.url.slice(1); // 去掉开头的斜杠
    const parts = url.split('/');
    
    if (parts.length < 2) {
        res.writeHead(404, {'Content-Type': 'text/plain'});
        res.end('Not Found');
        return;
    }
    
    const moduleName = parts[0];
    const functionName = parts[1];
    
    try {
        const modulePath = path.join(__dirname, 'actions', `${moduleName}.js`);
        const actionModule = require(modulePath);
        
        const actionHandler = actionModule.action(req);
        if (actionHandler && actionHandler[functionName]) {
            actionHandler[functionName]();
        } else {
            res.writeHead(404, {'Content-Type': 'text/plain'});
            res.end('Function Not Found');
        }
    } catch (err) {
        console.error(err);
        res.writeHead(500, {'Content-Type': 'text/plain'});
        res.end('Internal Server Error');
    }
});

server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

运行方式

  1. 将上述代码保存为 server.js
  2. 在终端中运行 node server.js
  3. 打开浏览器,访问 http://localhost:3000/foo/index,即可看到 “Hello world!” 的输出。

总结

SevenzJS 提供了一种简单的方式处理基本的路由请求,非常适合小型项目或快速原型开发。你可以根据需要扩展更多的功能,例如错误处理、日志记录等。希望这对你有所帮助!

回到顶部