npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

yisite

v0.0.2

Published

Fast, integration, minimalist web framework, yisite, yi, website

Readme

#YISITE YISITE,译为yi和site,yi代表拼音中的“一”,site代表website,整体译为**“一站式”的网站开发框架**。

这是一个快速的,整体的WEB框架,但它主要面向的是前端攻城师,我们关注的是public目录下的快速开发。但它是不安全的(没有安全验证、拦截、传输加密等),它寻求的是提供快速和高效搭建web app所需的服务端框架。

yisite集成monbodb,但目前仅支持windows平台,其它平台如需使用请自行替换对应操作系统版本的mongodb或配置外部的数据库连接


##一、历史版本

###0.0.2

1、get方法增加_id的查询支持,只有get支持,参考{ tablename: 'syuser', field: '_id', value: 'id' } 2、增加“[:now]”特殊处理,当传输的json当中含有“[:now]”,既会替换成服务器的时间,new Date().getTime()

###0.0.1

1、初次发布。


##二、安装

npm install yisite --save

##三、Hello Word ###目录

###index.html public/index.html

<!DOCTYPE html>
<html>
<head lang="zh-CN">
    <meta charset="UTF-8">
    <title>Hello Yi Site</title>
</head>
<body>
	Hello Yi Site
</body>
</html>

###app.js

var yisite = require('yisite')({
		appname: 'helloyisite',
		port: 80
	});

yisite.start(function() {
    console.log('Server listening on port ' + port);
});

###启动

node app.js

##四、YISITE API

require('yisite')(config);

/**
 * 创建app,并公布app和ws参数用于扩展service和websocket,start方法用于启动web服务线程。
 *
 * @param
 * {
 *      appname: string,    // 项目名称,用于定义内置数据库名称,默认值为yisite。
 *      port: number,       // 用于描述服务使用的端口,默认80。
 *      nosafe: true,       // 开放不安全接口,建议正式项目中,禁用该属性。
 *                          // 当开放该接口时,默认提供/base/add、/base/list等方法,不限制session进行访问,可方便快速开发和调试。
 *                          // 建议正式项目中禁用该选项,并且自己按需编写servie,具体利用app变量,参考express进行编写。
 *
 *      webpath: string,    // 用于描述前端静态资源的目录,通常是前端网页的相关资源,默认是项目跟目录的public目录,建议不要修改。
 *      dbpath: string      // 用于描述数据库连接,默认为空,既使用内置的mongodb数据库(目前仅支持window下)。
 *                          // 当配置该属性后,使用外部数据库,参考:dbusername:dbpassword@dburl:dbport/dbname。
 *                          // 目前仅支持monbodb。
 * }
 *
 * @returns
 * {
 *      app: express对象,可用于扩展service接口,
 *      ws: socket.io对象,可用于扩展ws接口,
 *      start: Function,启动服务,并调用callback方法。
 * }
 */

##五、快速的一站式解决方案 public/index.html,作为前端工程师,我们只需要关注public目录。

###完整的demo

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Hello Yi Site</title>

	<!-- include jQuery lib -->
    <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>

    <script type="text/javascript">
        function add() {
            var json = {
                tablename: 'syuser',
                check: ['name'],
                checkmsg: '用户已存在,不能重复添加!',
                data: {
                    name: 'test',
                    rename: '测试',
                    age: 27
                }
            };
            service('/base/add', json, function(json) {
                if(json.success) {
                    alert('添加成功!');
                } else {
                    alert('添加失败!错误原因:' + json.error);
                }
            });
        }

        function get() {
            var json = {
                tablename: 'syuser',
                field: 'name',
                value: 'test'
            };
            service('/base/get', json, function(json) {
                if(json.success) {
                    alert(JSON.stringify(json.data));
                } else {
                    alert('获取失败!错误原因:' + json.error);
                }
            });
        }

        function mod() {
            var json = {
                tablename: 'syuser',
                query: {
                    name: 'test'
                },
                data: {
                    rename: '测试用户名称修改',
                    age: 20
                }
            };
            service('/base/update', json, function(json) {
                if(json.success) {
                    alert(JSON.stringify(json.data));
                } else {
                    alert('修改失败!错误原因:' + json.error);
                }
            });
        }

        function del() {
            var json = {
                tablename: 'syuser',
                query: {
                    name: 'test'
                }
            };
            service('/base/remove', json, function(json) {
                if(json.success) {
                    alert(JSON.stringify(json.data));
                } else {
                    alert('删除失败!错误原因:' + json.error);
                }
            });
        }

        function list() {
            var json = {
                tablename: 'syuser'
            };
            service('/base/list', json, function(json) {
                if(json.success) {
                    alert(JSON.stringify(json.data));
                } else {
                    alert('查询失败!错误原因:' + json.error);
                }
            });
        }

        function page() {
            var json = {
                tablename: 'syuser',
                pagenum: 1,
                pagesize: 20,
                query: {
                    name: 'test'
                },
                sort: {
	                name: 1
	            }
            };
            service('/base/page', json, function(json) {
                if(json.success) {
                    alert(JSON.stringify(json.data));
                } else {
                    alert('查询失败!错误原因:' + json.error);
                }
            });
        }

        function service(url, data, callback) {
            $.ajax({
                dataType: 'json',
                url: url,
                data: {
	                // 交互数据核心部分,需把json转成字符串并且url编码后,
	                // 通过yijson字段传输到后台,如使用nodejs原生的
	                // querystring会导致数字也变为字符串导致
	                // mongobd保存数据异常和排序报错,如:
	                // sort: { name : 1 },使用原生的,后台会解析成'sort': { 'name' : '1' }
	                // 导致mongodb查询错误。
	                // 
	                // * 使用以下方式可以正常。
	                yijson: encodeURIComponent(JSON.stringify(data))
                },
                cache: false,
                success: function(json) {
                    callback(json);
                }
            });
        }
    </script>
</head>
<body>
    <button onclick="add()">添加</button>
    <button onclick="get()">获取</button>
    <button onclick="mod()">修改</button>
    <button onclick="del()">删除</button>
    <button onclick="list()">列表</button>
    <button onclick="page()">分页排序</button>
</body>
</html>

###添加 URL:/base/add 可直接提交json数据到/base/add进行保存,tablename为需要保存的数据表名,添加时可通过check数组对字段内容是否有重复进行检查。

function add() {
    var json = {
        tablename: 'syuser',
        check: ['name'],
        checkmsg: '用户已存在,不能重复添加!',
        data: {
            name: 'test',
            rename: '测试',
            age: 27
        }
    };
    service('/base/add', json, function(json) {
        if(json.success) {
            alert('添加成功!');
        } else {
            alert('添加失败!错误原因:' + json.error);
        }
    });
}

###获取Item URL:/base/get 通过tablename、field和值从数据库获取对应的记录,如需复合条件进行查询,请使用list接口。

function get() {
    var json = {
        tablename: 'syuser',
        field: 'name',
        value: 'test'
    };
    service('/base/get', json, function(json) {
        if(json.success) {
            alert(JSON.stringify(json.data));
        } else {
            alert('获取失败!错误原因:' + json.error);
        }
    });
}

###修改 URL:/base/update query值为查询记录的条件,data为需要修改的值。

function mod() {
    var json = {
        tablename: 'syuser',
        query: {
            name: 'test'
        },
        data: {
            rename: '测试用户名称修改',
            age: 20
        }
    };
    service('/base/update', json, function(json) {
        if(json.success) {
            alert(JSON.stringify(json.data));
        } else {
            alert('修改失败!错误原因:' + json.error);
        }
    });
}

###删除 URL:/base/remove

function del() {
    var json = {
        tablename: 'syuser',
        query: {
            name: 'test'
        }
    };
    service('/base/remove', json, function(json) {
        if(json.success) {
            alert(JSON.stringify(json.data));
        } else {
            alert('删除失败!错误原因:' + json.error);
        }
    });
}

###获取list URL:/base/list query为查询条件,sort为排序,query和sort均支持mongodb语法,也可以不带对应参数。

function list() {
    var json = {
        tablename: 'syuser'
    };
    service('/base/list', json, function(json) {
        if(json.success) {
            alert(JSON.stringify(json.data));
        } else {
            alert('查询失败!错误原因:' + json.error);
        }
    });
}

###获取page URL:/base/page query为查询条件,sort为排序,query和sort均支持mongodb语法。

function page() {
    var json = {
        tablename: 'syuser',
        pagenum: 1,
        pagesize: 20,
        query: { name: 'test' },
        sort: { name: 1 }
    };
    service('/base/page', json, function(json) {
        if(json.success) {
            alert(JSON.stringify(json.data));
        } else {
            alert('查询失败!错误原因:' + json.error);
        }
    });
}

##六、集成SOCKET.IO,支持websocket yisite集成socket.io,支持websocket

<!DOCTYPE html>
<html>
<head lang="zh-CN">
    <meta charset="UTF-8">
    <title>Hello Word</title>

    <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
    <script src="http://cdn.bootcss.com/socket.io/1.3.2/socket.io.min.js"></script>

    <script type="text/javascript">
        var socket;
        
        $(function() {
            socket = io('/');
            
            socket.on('broadcast', function(data) {
               $('#newmsg').text(data.msg); 
            });
        });
        
        function send() {
            var msg = $('#sendmsg').val();
            service('/base/wsbroadcast', { event: 'broadcast', data: {msg: msg} });
        }
    </script>
</head>
<body>
<input type="text" id="sendmsg" style="width:300px;"/>
<button onclick="send()">广播消息</button>
<br><br>
最新消息:<span id="newmsg"></span>
</body>
</html>

##七、使用外部的数据库 yisite支持外部数据库的连接,但目前仅支持mongodb。

var dburl = 'dbuser:dbpassword@dburl:dbport/dbname';
var yisite = require('yisite')({
		appname: 'helloyisite',
		port: 80,
		dbpath: dburl
	});

yisite.start(function() {
    console.log('Server listening on port ' + port);
});