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 🙏

© 2024 – Pkg Stats / Ryan Hefner

mikujs

v1.5.4

Published

a nodejs framework

Downloads

25

Readme

mikujs

A Node.js framework.

Installation

$ npm install --save mikujs

CLI

$ npm install -g mikujs-cli

Note

Necessary directories description.

  • configs Set all config .json files.
  • static Static files.
  • schedules Schedules files.

Component

Boot

const Boot = require('mikujs').Boot;

Boot({
    cors: true, // default value is false
    port: 3010, // default value is 3000
    middlewares: [],  // default value is []
    apis: [], // default value is []
    unTokenPaths: [], // default value is []
});

Api

const Api = require('mikujs').Api();

const api = new Api();

api.get({
  url: '/test',
  service: async () => {
    return 'test message';
  },
});

api.post({
  url: '/test',
  service: async () => {
    return 'test message';
  },
});

api.upload({
  url: '/test',
  fieldName: 'file',
  service: async (ctx) => {
    const fileName = ctx.req.files[0].filename;
    return fileName;
  },
});

// default paramName is fileName
api.download({
  url: '/test',
});

api.download({
  url: '/test',
  paramName: 'fileName1',
});

If you want to validate params, see more from joi, For example

api.get({
    url: '/test',
    validate: {
      name: {
        required: true,
      },
      value: {
        type: 'number',
        min: 1,
      },
    },
    service: async () => {
      return 'test message';
    },
});

If you do want to set allow file suffix, For example

api.upload({
    url: '/test',
    fieldName: 'file',
    fileSuffixs: ['txt'],
    service: async (ctx) => {
       const fileName = ctx.req.files[0].filename;
       return fileName;
    },
});

If you do want to set file size, For example

api.upload({
    url: '/test',
    fileSize: 2,
    service:  async (ctx) => {
       const files = [];
       ctx.req.files.forEach((file) => {
         files.push(file.filename);
       });
       return files;
    },
});

If you do want to set file limit, For example

api.upload({
    url: '/test',
    fileLimit: {
      fileSize: 1048576, // 1MB = 1024 * 1024Byte = 1048576Byte
      files: 5,
    },
    service: async (ctx) => {
        const fileName = ctx.req.files[0].filename;
        return fileName;
    },
});

If you do want to upload memory, For example

api.upload({
    url: '/test',
    memory: true,
    service: async (ctx) => {
       const { originalname, buffer } = ctx.req.files[0];
       const fileSuffix = File.suffix(originalname);
       const fileName = await AliOss.upload('test', fileSuffix, buffer);
       return fileName;
    }
});

If you do want to have security, For example

api.get({
    url: '/test',
    security: {
      roles: ['roleCode'],
      permissions: ['permissionCode'],
    },
    service: async () => {
       return 'test message';
    },
});

If you do want to wechat pay notify, For example

api.weChatPayNotify({
    url: '/test',
    type: 'refund',
    service: async (ctx) => {
       const info = ctx.request.weixin;
       return 'error message' || ''; // '' is success
    },
});

Log

const Log = require('mikujs').Log;

Log.debug('debug');
Log.info('info');
Log.error('error');

CoreError

const CoreError = require('mikujs').CoreError;

throw new CoreError('error message');

Redis

const Redis = require('mikujs').Redis;

Redis.redis; // redis instantce

Redis.set(key, value);
Redis.set(key, value, expireTime); // expireTIme unit: second
const value = await Redis.get(key);

Token

const Token = require('mikujs').Token;

const token = Token.set(tokenValue);

If you do want to set security, For example

const token = Token.set({
  security: {
    roles: ['roleCode'],
    permissions: ['permissionCode'],
  },
});

Lodash

See more from lodash

File

const File = require('mikujs').File;

const f = File.name(fileName); // remove file suffix
const s = File.suffix(fileName); // get file suffix
const obj = File.convertToObject(path); // convert to object from path
const arr = File.covertToArray(path); // convert to array from path
File.del(path); // delete file
File.exist(path); // file exists
File.write(path, data); // write file
File.read(path); // read file
File.chmod(path, mode); // chmod file

Moment

See more from moment

Model

const Model = require('mikujs').Model;

Model.sequelize; // sequelize object

Model.define(tableName, fields); // define model

Model.string(length);
Model.char(length);
Model.boolean();
Model.integer();
Model.double();
Model.enums();
Model.date();
Model.text();

For Example

const Model = require('mikujs').Model;

// define test model
const test = Model.define('test', {
    name: {
        type: Model.string(50),
        allowNull: false,
    },
    value: {
        type: Model.integer(),
        allowNull: false,
    },
});

Digest

const Digest = require('mikujs').Digest;

const value = Digest.md5('123456');
// 3: digest count, default is 1
const value = Digest.md5('123456', 3);

Captcha

const Captcha = require('mikujs').Captcha;

const captchaValue = await Captcha.generate(mobileNumber);
const result = await Captcha.check(captchaValue, mobileNumber);

If you want to set expired time, For example

const captchaValue = await Captcha.generate('159xxxx8250', {
    expired: 20 * 60 // twenty minutes
});

Http

const Http = require('mikujs').Http;

const result = await Http.http(opts);
const result = await Http.get(opts);
const result = await Http.post(opts);
const result = await Http.put(opts);
const result = await Http.del(opts);

For Example

const result = await Http.get({
    url: 'http://www.baidu.com',
    headers: {},
    data: {},
});

If you want to use form data, For example

const FormData = require('form-data');
const formData = new FormData();
formData.append('driveId', driveId);
formData.append('path', fileName);
formData.append('file', buffer);

const result = await Http.post({
    url: '/upload',
    headers: {
      'Access-Token': 'xxxx',
      ...formData.getHeaders(),
    },
    data: formData,
    maxContentLength: 52428800, // 50M
    dealError: async (err) => {
      if (err.response) {
        console.log(err.response.status);
      }
    },
});

Push

const Push = require('mikujs').Push;

const aliasValue = Push.alias(value);
Push.simple(content, opts);

For Example

Push.simple('test', {
    platform: 'ios',
});

Uuid

const Uuid = require('mikujs').Uuid;

Uuid.generate(needConnector);

For Example

Uuid.generate();

If you want to need connector like '-', For example

Uuid.generate('-');

Socket

const Socket = require('mikujs').Socket;

Socket.on(name, event);
Socket.emit(name, value);

For Example

Socket.on('chat message', (msg) => {
  console.log(`message: ${msg}`);
});
Socket.emit('chat message', 'test');

Validator

See more from validator

Util

const Util = require('mikujs').Util;

// transaction
await Util.transaction(async(t) => {
    await test.create({
        name: 'test',
        value: 1,
    }, {
        transaction: t,
    });

    const isUpdated = await test.update({
      value: 2,
    }, {
      where: {
        name: 'test',
      },
      transaction: t,
    });

    if (!isUpdated[0]) {
      // if has update, must manual rollback
      await t.rollback();
    }
});

// datetime format
Util.dateTimeFormat(value);

// date format
Util.dateFormat(value);

// time format
Util.timeFormat(value);

// add 2 days
Util.addDays({
  days: 2,
});

// minus 1 days
Util.minusDays();

// check mobile
Util.isMobile(mobile);

// covert china characters to first letter
Util.coverToFirstLetter('中心');

// findAll or page
opts = opts || {};

const where = {};

const page = opts.page || false;
const current = opts.current || 1;
const size = opts.size || 10;

const departments = await Util.findAllOrPage(departmentModel, {
  page,
  current,
  size,
}, {
  order: [
    ['sort', 'desc'],
  ],
  where,
  include: [
    {
      model: departmentModel,
      as: 'parent',
    },
  ],
});

return departments;

WeChat

const WeChat = require('mikujs').WeChat;

const redirectUrl = WeChat.generateRedirectUrl(redirectUrl, state, scope);
const redirectUrlForWebsite = WeChat.generateRedirectUrlForWebsite(redirectUrl, state, scope);
const token = await WeChat.getAccessTokenAndOpenId(code);
const jsConfig = await WeChat.getJsConfig(jsApiList, url, debug);

Joi

See more from joi

AliOss

const AliOss = require('mikujs').AliOss;

AliOss.upload('test', 'jpg', buffer);

WeChatPay

const WeChatPay = require('mikujs').WeChatPay;

const result = await WeChatPay.getPayParams(outTradeNo, body, totalFee, openId);
const result = await WeChatPay.getAppParams(outTradeNo, body, totalFee);
const result = await WeChatPay.unifiedOrder(outTradeNo, body, totalFee, openId);
const result = await WeChatPay.refundOrder(outTradeNo, outRefundNo, totalFee, refundFee);

Schedule

See more from node-schedule

WeChatEnterPrise

const WeChatEnterPrise = require('mikujs').WeChatEnterPrise;

WeChatEnterPrise.message('message content');

Cheerio

See more from cheerio

Pinyin

See more from pinyin

Bagpipe

const Bagpipe = require('mikujs').Bagpipe;

Bagpipe.downFile('http://xxxxxx.jpg', 'download/bagpipe.jpg');

Gt

const Gt = require('mikujs').Gt;

await Gt.register(); // get html need param
await Gt.vertify(challenge, validate, seccode); // second vertify

Random

const Random = require('mikujs').Random;

Random.generate(length);

For Example

Random.generate();

If you want to change length like 6, For example

Random.generate(6);

Math

See more from mathjs

Excel

See more from exceljs

// write
const Excel = require('mikujs').Excel;

const columns = [
  { header: '列名', key: 'columnKey', width: 100 },
];

const rows = [
  { columnKey: 'lalala' },
];

await Excel.simpleWrite('test.xlsx', columns, rows);

// read
const cellValues = await Excel.simpleRead('test2.xlsx', 3);

Dict

const Dict = require('mikujs').Dict;

// wrap
Dict.wrap({
  // 大图
  BIG: {
    code: 'NEWS_TYPE_BIG',
    description: '大图',
  },
  // 右图
  RIGHT: {
    code: 'NEWS_TYPE_RIGHT',
    description: '右图',
  },
  // 三张图
  THREE: {
    code: 'NEWS_TYPE_THREE',
    description: '三张图',
  },
});

Chokidar

const Chokidar = require('mikujs').Chokidar;

const watcher = await Chokidar.init('/Users/frank/Downloads/watch');

watcher
  .on('add', path => console.log(`File ${path} has been added`))
  .on('change', path => console.log(`File ${path} has been changed`))
  .on('unlink', path => console.log(`File ${path} has been removed`))
  .on('addDir', path => console.log(`Directory ${path} has been added`))
  .on('unlinkDir', path => console.log(`Directory ${path} has been removed`));