🍔 A Node.js Serverless Framework for front-end/full-stack developers. Build the application for next decade. Works on AWS, Alibaba Cloud, Tencent Cloud and traditional VM/Container. Super easy integrate with React and Vue. 🌈

Overview

Midway Logo

Midway - 一个面向未来的云端一体 Node.js 框架

GitHub license GitHub tag Build Status Test Coverage lerna Known Vulnerabilities PRs Welcome Codacy Badge Backers on Open Collective Sponsors on Open Collective Gitpod Ready-to-Code Code Style: MidwayJS

English | 简体中文

🥳 欢迎观看 Midway Serverless 2.0 发布会回放: https://www.bilibili.com/video/BV17A411T7Md

《Midway Serverless 发布 2.0,一体化让前端研发再次提效》

特性

  • 🐘 全功能:支持 Web 应用/Serverless/FaaS/微服务/小程序后端等多种场景,基于装饰器和依赖注入开发企业级应用
  • 🐦 前端集成:全新的云端一体应用研发体验,零 API 调用,使用 "React Hooks " 风格一体研发
  • 🐴 跨平台:支持部署至普通 Server 或 Serverless/FaaS 环境
  • 🐶 扩展:组件化扩展能力,另外支持使用 Koa/Express/Egg.js 生态插件
  • 🐂 示例: 官方提供多种场景的示例代码,方便开发者快速上手
  • 🛡 TypeScript 全面支持

描述

Midway 是一个适用于构建 Serverless 服务,传统应用、微服务,小程序后端的 Node.js 框架。

Midway 可以使用 Koa,Express 或 Egg.js 作为基础 Web 框架。它还提供了独立使用的基本解决方案,例如 Socket.io,GRPC,Dubbo.js 和 RabbitMQ 等。

此外,Midway 也适用于前端/全栈开发人员的 Node.js 无服务器框架。构建下一个十年的应用程序。可在 AWS,阿里云,腾讯云和传统 VM /容器上运行。与 React 和 Vue 轻松集成。 🌈

Demo

使用装饰器开发 Web 应用

import { Controller, Get, Provide } from '@midwayjs/decorator';

@Provide()
@Controller('/')
export class HomeController {

  @Get('/')
  async home() {
    return `Welcome to midwayjs!`;
  }
}

使用函数开发全栈应用

后端代码 src/apis/lambda/index.ts

import { useContext } from '@midwayjs/hooks'

export async function getPath() {
  // 获取请求 HTTP Context
  const ctx = useContext()
  return ctx.path
}

前端调用 src/page/index.tsx

import { getPath } from './apis/lambda'

getPath().then((path) => {
  // 发送 GET 请求到 /api/getPath
  // 返回值: /api/getPath
  console.log(path)
})

快速上手

npm i @midwayjs/cli -g --registry=https://registry.npm.taobao.org

## 创建项目
mw new helloworld

## 进入项目路径
cd helloworld && npm run dev

如何部署等更多进阶请访问 中文文档

文档和社区

示例

midway-examples

请访问 midway-examples.

VSC Plugin

答疑

群里会有热心的朋友,也会有新版本发布推送。钉钉扫码加入答疑群

二群

一群(已满)

贡献

请告知我们可以为你做些什么,不过在此之前,请检查一下是否有 已经存在的Bug或者意见

如果你是一个代码贡献者,请参考代码贡献规范。

谁在使用

image

License

我们的代码使用 MIT 协议,请放心使用。

FOSSA Status

Comments
  • Windows平台Powershell和Cmd中midway-init无法初始化midway-ts项目

    Windows平台Powershell和Cmd中midway-init无法初始化midway-ts项目

    • Node Version: 10.14.2

    • Egg Version: midway-ts

    • Npm Version:6.4.1/6.5

    • Platform:Windows 10 1703

    • Mini Showcase Repository: --

    • Desc: 注意看时间,,, 拉不到项目模板.

    default

    default

    question 
    opened by Akimotorakiyu 39
  • 升级midway3.6.0依赖后项目启动卡死

    升级midway3.6.0依赖后项目启动卡死

    部分依赖包升级到^3.6.0 版本后,项目启动 npm run dev 卡死,控制台输出如下,不太好排查

    npm run dev                             
    > [email protected] dev
    > cross-env NODE_ENV=local midway-bin dev --ts
    
    ⠏ Midway Starting 2022-10-12 15:02:32,388 INFO 74916 [midway:redis] server connecting redis://:***@127.0.0.1:16379/{ [Symbol(origin_args)]: [Array] }
    2022-10-12 15:02:32,397 INFO 74916 [midway:redis] client connect success
    ⠋ Midway Starting 2022-10-12 15:02:32,486 INFO 74916 [midway:sequelize] connecting and start
    ⠋ Midway Starting 
    

    依赖

    {
        "dependencies": {
            "@midwayjs/bootstrap": "^3.6.0",
            "@midwayjs/bull": "^3.6.0",
            "@midwayjs/core": "^3.6.0",
            "@midwayjs/cross-domain": "^3.6.0",
            "@midwayjs/decorator": "^3.6.0",
            "@midwayjs/jwt": "^3.6.0",
            "@midwayjs/koa": "^3.6.0",
            "@midwayjs/logger": "^2.17.0",
            "@midwayjs/redis": "^3.6.0",
            "@midwayjs/sequelize": "^3.6.0",
            "@midwayjs/swagger": "^3.6.0",
            "@midwayjs/validate": "^3.6.0",
            "@mw-components/jaeger": "^13.1.4",
            "@mw-components/koid": "^9.1.1",
            "@waiting/shared-core": "^20.5.0",
            "@waiting/shared-types": "^20.5.0",
            "bcryptjs": "^2.4.3",
            "bignumber.js": "^9.1.0",
            "chalk": "^5.0.1",
            "dayjs": "^1.11.5",
            "dotenv": "^16.0.1",
            "ipip-ipdb": "^0.6.0",
            "joi": "^17.6.0",
            "lodash": "^4.17.21",
            "mysql2": "^2.3.3",
            "path-to-regexp": "^6.2.1",
            "randomstring": "^1.2.2",
            "sequelize": "^6.21.4"
        }
    }
    
    

    代码仓库:https://github.com/ddzyan/midway-practice/tree/%40midwayv3.6.0

    opened by ddzyan 31
  • controller 单元测试报错 reading 'getApplication'

    controller 单元测试报错 reading 'getApplication'

    Midway3.0,上层框架使用 koa ,controller 单元测试报错,代码如下

    import { createApp, close, createHttpRequest } from '@midwayjs/mock';
    import { Framework, Application } from '@midwayjs/koa';
    
    describe('test/controller/home.test.ts', () => {
      let app: Application;
    
      beforeAll(async () => {
        // 只创建一次 app,可以复用
        try {
          // 由于Jest在BeforeAll阶段的error会忽略,所以需要包一层catch
          // refs: https://github.com/facebook/jest/issues/8688
          app = await createApp<Framework>();
        } catch (err) {
          console.error('test beforeAll error', err);
          throw err;
        }
      });
    
      afterAll(async () => {
        await close(app);
      });
    
      it('should GET /api', async () => {
        // make request
        const result = await createHttpRequest(app).get('/api');
    
        // use expect by jest
        expect(result.status).toBe(200);
        expect(result.text).toBe('Hello Midwayjs!');
      });
    });
    
    

    报错内容 image

    opened by ddzyan 28
  • chore(web): add generics parameter of IMidwayWebContext

    chore(web): add generics parameter of IMidwayWebContext

    use unknown as default value

    Checklist
    • [ ] npm test passes
    • [ ] tests and/or benchmarks are included
    • [ ] documentation is changed or added
    • [ ] commit message follows commit guidelines
    Affected core subsystem(s)
    Description of change
    opened by waitingsong 27
  • egg-graphql的connector无法从ctx上取到service

    egg-graphql的connector无法从ctx上取到service

    export default class CarConnector {
        ctx;
        mysql;
        redis;
        service;
        constructor(ctx) {
          this.ctx = ctx;
          this.mysql = ctx.app.mysql.get('g7tv');
          this.redis = ctx.app.redis;
          this.service = ctx.service.carDayCount;
        }
    
        fail(message: string | Error): Error  {
            if (typeof message === 'string') {
                return new Error(message);
            }
            return message;
        }
        getStatisticsInfo(args) {
            return this.service.getStatisticsInfo(args);
        }
        getCarStatusCount() {
            return this.service.getCarStatusCount();
        }
        async getCarCount({ ymd }) {
            const userinfo = await this.ctx.g7User();
            return this.service.findOne({
                ymd,
                orgroot: userinfo.orgroot,
            });
        }
    }
    
    

    这是egg里的写法 能从ctx上取到service。。。但midway这里就取不到。。

    opened by yuu2lee4 25
  • 服务单元测试无法获得父类方法

    服务单元测试无法获得父类方法

    image

    在对 service 单元测试的时候,无法获得 service 从父类继承的方法,具体代码如下

    import { relative } from 'path';
    import * as assert from 'assert';
    
    import { testConfig } from '../root.config';
    import { ClassroomService } from '../../src/app/service/classroom';
    
    const filename = relative(process.cwd(), __filename).replace(/\\/gu, '/');
    
    describe(filename, () => {
      it('should create', async () => {
        const classroomService = await testConfig.app
          .getApplicationContext()
          .getAsync<ClassroomService>(ClassroomService);
    
        const res = await classroomService.create({ grade: 1, prom: 2 });
        assert(res);
      });
    });
    
    

    classroom.ts 定义如下,BaseService 中已经定义了 create 方法

    import { Provide, Inject } from '@midwayjs/decorator';
    import { SequelizeDataSourceManager } from '@midwayjs/sequelize';
    
    import { BaseService } from '@/core/baseService';
    import { ClassroomMapping } from '../mapping/classroom';
    import { UserMapping } from '../mapping/user';
    
    @Provide()
    export class ClassroomService extends BaseService {
      @Inject()
      protected mapping: ClassroomMapping;
    
      @Inject()
      private sequelizeDataSourceManager: SequelizeDataSourceManager;
    
      @Inject()
      protected userMapping: UserMapping;
    
      async destroyClassroomAndUser(classroomId: number) {
        const t = await this.sequelizeDataSourceManager
          .getDataSource('default')
          .transaction();
        try {
          await this.mapping.destroy({ id: classroomId }, t);
          await this.userMapping.destroy({ classroomId }, t);
          await t.commit();
          return true;
        } catch (error) {
          await t.rollback();
          throw error;
        }
      }
    }
    
    
    No update status for a long time 
    opened by ddzyan 23
  • 使用npm run start_build打包并运行项目, 如下报错该如何解决?

    使用npm run start_build打包并运行项目, 如下报错该如何解决?

    hi, 打扰了,请教个问题。 我使用start_build (npm run build && set NODE_ENV=development && midway-bin dev)打包并运行项目,出现了错误,请问如何解决这个问题。谢谢。 (已知在直接使用npm run dev直接运行的情况下并无报错。)

    info

    opened by linzelong95 23
  • pm2/Pandora 启动后访问报错

    pm2/Pandora 启动后访问报错

    PM2

    按照文档,在项目目录下新增server.js

    require('midway/server');
    

    然后运行pm2

    pm2 start server.js
    

    程序可以正常跑起来,但是访问路径后报错

    Please set config.keys first
    

    检查dist目录发现没有生成代码。

    Pandora

    使用默认procfile.js文件

    'use strict';
    module.exports = pandora => {
      pandora
        .fork('backend', require.resolve('midway/server'));
    };
    

    pandora全局安装,并运行

    pandora start
    

    错误情况与PM2相同 ** 如果是dev运行则正常 **

    opened by hodgevk 23
  • Inject未赋值identifier时,特殊情况下,对应的namespace会错误,导致找不到该属性。

    Inject未赋值identifier时,特殊情况下,对应的namespace会错误,导致找不到该属性。

    以引用 @midwayjs/axios 为例

    import { Provide, Inject, Logger } from '@midwayjs/decorator';
    import { HttpService } from '@midwayjs/axios';
    
    @Provide()
    export class GetAccessTokenService {
      @Inject()
      httpService: HttpService;
    
      @Inject('cache:cacheManager')
      cache;
    
      async execute(args, scope, next): Promise<any> {
        const { data, status } = await this.httpService.get(`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`);
      }
    }
    
    @Configuration({
      imports: [
        '@midwayjs/axios',
      ],
      namespace: 'WX',
      importConfigs: [
        join(__dirname, 'config')
      ]
    })
    export class WechatConfiguration implements ILifeCycle {
      @App()
      app: IMidwayApplication
    
      @Inject()
      appDir: any
    
      @Logger()
      coreLogger: ILogger;
    
      async onReady(content: IMidwayContainer) {
      }
    }
    

    如果将整个component发布成包的形式进行调用,系统会报错。报错如下:

    NotFoundError: WX:httpService in class GetAccessTokenService is not valid in current context
    

    httpService的namespace变成了WX。

    Checklist
    • [ ] npm test passes
    • [ ] tests and/or benchmarks are included
    • [ ] documentation is changed or added
    • [ ] commit message follows commit guidelines
    Affected core subsystem(s)

    @midwayjs/core @midwayjs/decorator

    Description of change

    在savePropertyInject函数中,为metadata中加入新的属性originDesign,存放inject属性对应的类型。并在restoreDefinition函数中根据originDesign值查询正确的identifier。

    opened by roy2an 20
  • feat: support inject by class

    feat: support inject by class

    如果属性明确标识了 class 类型,则取 class 的 provideId 做为 key。比如

    @Provode()
    class UserService {}
    
    @Provide()
    class UserController {
    
      @Inject()
      service: UserService;   // 这里因为标识的是class,那么注入的就是这个类型
    }
    
    老代码这样写,由于获取的是属性名,所以会报错,但是新代码下可以成功注入。
    
    但是在下面的代码下,是 breaking change。
    
    ```ts
    @Provide()
    class InjectParent {
    }
    
    @Provide()
    class InjectChild extends InjectParent {
    }
    
    class Test {
      @Inject()
      child: InjectParent;
    
      @Inject()
      InjectChild: InjectParent;
    }
    

    这里有个 breaking change,如果类型显示是父类,按照新逻辑,注入的实例就会是父类,而不是子类,但是老的场景下就会是子类。

    opened by czy88840616 19
  • refactor(midway-web): safelyGet()

    refactor(midway-web): safelyGet()

    • add types
    • iterate with for-of instead of while
    • validate variable undefined with typeof
    • validate value undefined ahead of null check
    • return void 0 instead of undefined
    Checklist
    • [x] npm test passes
    • [ ] tests and/or benchmarks are included
    • [ ] documentation is changed or added
    • [x] commit message follows commit guidelines
    Affected core subsystem(s)
    Description of change
    opened by waitingsong 19
  • socketio 组件怎么在握手阶段拒绝连接?

    socketio 组件怎么在握手阶段拒绝连接?

    • Node Version: v18.12.1
    • Midway Version(Decorator/Core): @midwayjs/[email protected]
    • Component Name/Version: @midwayjs/[email protected]
    • Platform: macOS
    • Mini Showcase Repository:

    我使用 @midwayjs/socketio 实现了一些逻辑,我想在握手阶段做身份验证,如果验证不通过,就拒绝连接,下面是我的代码:

    // src/middleware/socket.middleware.ts
    import { Middleware, } from '@midwayjs/decorator';
    import { httpError } from '@midwayjs/core';
    import { Context, NextFunction } from '@midwayjs/socketio';
    
    @Middleware()
    export class SocketMiddleware {
      resolve() {
        return async (ctx: Context, next: NextFunction) => {
    
          if (!isValid(ctx.handshake.headers.token)) {
            // 不起作用,仍然建立了连接
            throw new httpError.UnauthorizedError();
          }
        
          return next();
        }
      }
    }
    
    // src/configuration.ts
    async onReady() {
      this.socketApp.useConnectionMiddleware(SocketMiddleware);
    }
    

    但是这段代码并不起作用,客户端仍然会监听到 connect 事件,即使我在中间件里调用 ctx.disconnect(),客户端也是先监听到 connect,然后监听到 disconnect

    如果使用 socket.io 本身的中间件写法,就没有问题,可以给 next 传 error 参数来抛出异常中止连接,客户端也不会监听到 connect 事件,但是这样我没办法在中间件实现里获取我要的各种 service。代码如下:

    // src/configuration.ts
    async onReady() {
      this.socketApp.use((socket, next) => {
        const err = new Error("not authorized");
        next(err);
      });
    }
    

    有没有什么方法在 midway 的中间件里实现抛出异常,中止掉 ws 连接?

    opened by zuozuomuxi 4
  • fix: run stop lifecycle with reverse

    fix: run stop lifecycle with reverse

    Checklist
    • [ ] npm test passes
    • [ ] tests and/or benchmarks are included
    • [ ] documentation is changed or added
    • [ ] commit message follows commit guidelines
    Affected core subsystem(s)
    Description of change
    pr: bug fix 
    opened by czy88840616 1
  • 系统日志记录的IP为undefined

    系统日志记录的IP为undefined

    Midway version = 2.3.0

    我在服务器上发现一些奇怪的日志:

    1. 某个请求到达服务器的时候,其日志的ip显示未undefined,
    2. 同一个请求出现在不同的worker中(启用了workers=2的script)

    怀疑点:

    1. 同一个请求在pod上切换worker导致的错误(cpu.resource.cpu = 1, 但是我的scripte配置workers=2)
    2. 外部客户端断开连接导致的undefined(系统日志是在请求完成的时候打的)
    3. k8s本身可能存在的错误

    附上部分日志

    情况一

    2023-01-03 10:18:53,433 INFO 47 [-/undefined/-/5147ms GET /v1/lobby/auth/code?code=513f866a-5538-46eb-be0b-97fa506f84dc&t=1672712327344] REQUEST-COST-TIME => 5146
    2023-01-03 10:18:54,938 INFO 47 [-/undefined/-/6133ms GET /v1/lobby/auth/code?code=0573004f-cc5f-472f-b640-2cfd457ba889&t=1672712329122] xxxx
    2023-01-03 10:18:54,938 INFO 47 [-/undefined/-/6133ms GET /v1/lobby/auth/code?code=0573004f-cc5f-472f-b640-2cfd457ba889&t=1672712329122] REQUEST-COST-TIME => 6133
    2023-01-03 10:18:57,239 INFO 53 [-/undefined/-/5214ms POST /v1/lobby/join/anonymously] xxxx
    2023-01-03 10:18:57,239 INFO 53 [-/undefined/-/5214ms POST /v1/lobby/join/anonymously] REQUEST-COST-TIME => 5213
    2023-01-03 10:18:57,324 INFO 53 [-/undefined/-/5620ms POST /v1/lobby/join/anonymously] yyyy
    2023-01-03 10:18:57,324 INFO 53 [-/undefined/-/5620ms POST /v1/lobby/join/anonymously] REQUEST-COST-TIME => 5619
    2023-01-03 10:18:57,430 INFO 47 [-/undefined/-/5658ms GET /v1/lobby/auth/code?code=64d5a588-705d-4962-b9bb-4348ac89f6ab&t=1672712331298] zzzz
    

    情况二

    root@staging-xx:~/logs/my-midway-project# cat midway-web.log.2023-01-03 | grep '6127c507-27a6-4f28-8870-609d1648967f'
    2023-01-03 11:08:05,695 INFO 53 [-/undefined/-/642ms GET /v1/lobby/auth/code?code=6127c507-27a6-4f28-8870-609d1648967f&t=1672715285029] xxx
    2023-01-03 11:08:05,695 INFO 53 [-/undefined/-/643ms GET /v1/lobby/auth/code?code=6127c507-27a6-4f28-8870-609d1648967f&t=1672715285029] REQUEST-COST-TIME => 643
    2023-01-03 11:08:06,324 INFO 47 [-/10.240.22.188/-/586ms GET /v1/lobby/auth/code?code=6127c507-27a6-4f28-8870-609d1648967f&t=1672715285029] yyy
    2023-01-03 11:08:06,324 INFO 47 [-/10.240.22.188/-/587ms GET /v1/lobby/auth/code?code=6127c507-27a6-4f28-8870-609d1648967f&t=1672715285029] REQUEST-COST-TIME => 587
    
    
    opened by Thetiso 12
  • chore(deps): update dependency typescript to v4.9.4

    chore(deps): update dependency typescript to v4.9.4

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | typescript (source) | 4.8.4 -> 4.9.4 | age | adoption | passing | confidence |


    Release Notes

    Microsoft/TypeScript

    v4.9.4: TypeScript 4.9.4

    Compare Source

    For release notes, check out the release announcement.

    For the complete list of fixed issues, check out the

    Downloads are available on:

    Changes:

    This list of changes was auto generated.

    v4.9.3: TypeScript 4.9

    Compare Source

    For release notes, check out the release announcement.

    Downloads are available on:

    Changes:

    See More

    This list of changes was auto generated.


    Configuration

    📅 Schedule: Branch creation - "before 3am on Friday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    pr: dependencies 
    opened by renovate[bot] 0
  • chore(deps): update dependency fs-extra to v10.1.0

    chore(deps): update dependency fs-extra to v10.1.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | fs-extra | 10.0.1 -> 10.1.0 | age | adoption | passing | confidence |


    Release Notes

    jprichardson/node-fs-extra

    v10.1.0

    Compare Source

    • Warn if fs.realpath.native does not exist, instead of erroring (#​953)
    • Allow explicitly passing undefined options to move() (#​947, #​955)
    • Use process.emitWarning instead of console.warn (#​954)

    Configuration

    📅 Schedule: Branch creation - "before 3am on Friday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    pr: dependencies 
    opened by renovate[bot] 1
  • chore(deps): update dependency @types/amqplib to v0.10.1

    chore(deps): update dependency @types/amqplib to v0.10.1

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | @types/amqplib (source) | 0.8.2 -> 0.10.1 | age | adoption | passing | confidence |


    Configuration

    📅 Schedule: Branch creation - "before 3am on Friday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    pr: dependencies 
    opened by renovate[bot] 1
Releases(v3.9.8)
Owner
Midway.js
Serverless framework for Node.js
Midway.js
Catberry is an isomorphic framework for building universal front-end apps using components, Flux architecture and progressive rendering.

Catberry What the cat is that? Catberry was developed to help create "isomorphic/Universal" Web applications. Long story short, isomorphic/universal a

Catberry.js 801 Dec 20, 2022
The Simple, Secure Framework Developers Trust

@hapi/hapi The Simple, Secure Framework Developers Trust Build powerful, scalable applications, with minimal overhead and full out-of-the-box function

hapi.js 14.1k Dec 31, 2022
MVC framework making it easy to write realtime, collaborative applications that run in both Node.js and browsers

Derby The Derby MVC framework makes it easy to write realtime, collaborative applications that run in both Node.js and browsers. Derby includes a powe

DerbyJS 4.7k Dec 23, 2022
The Intuitive Vue Framework

Build your next Vue.js application with confidence using Nuxt: a framework making web development simple and powerful. Links ?? Documentation: https:/

Nuxt 41.8k Jan 9, 2023
:evergreen_tree: Modern Web Application Framework for Node.js.

Trails is a modern, community-driven web application framework for Node.js. It builds on the pedigree of Rails and Grails to accelerate development by

Trails 1.7k Dec 19, 2022
LoopBack makes it easy to build modern API applications that require complex integrations.

LoopBack makes it easy to build modern applications that require complex integrations. Fast, small, powerful, extensible core Generate real APIs with

StrongLoop and IBM API Connect 4.4k Jan 4, 2023
A template project for building high-performance, portable, and safe serverless functions in Vercel.

Tutorial | Demo for image processing | Demo for tensorflow This is a Next.js project bootstrapped with create-next-app. This project is aimed to demon

Second State 63 Dec 8, 2022
Use full ES2015+ features to develop Node.js applications, Support TypeScript.

ThinkJS Use full ES2015+ features to develop Node.js applications, Support TypeScript. 简体中文文档 Installation npm install -g think-cli Create Application

ThinkJS 5.3k Dec 30, 2022
AWS Lambda router for NodeJS

AWS Lambda Router for NodeJS A collection of tools to handle ApiGateway requests and direct function invocation calls on AWS Lambda. Use it as a stand

Dumitru Glavan 11 Apr 22, 2019
🥚 Born to build better enterprise frameworks and apps with Node.js & Koa

Features Built-in Process Management Plugin System Framework Customization Lots of plugins Quickstart Follow the commands listed below. $ mkdir showca

egg 18.3k Dec 29, 2022
:seedling: Next-Gen AI-Assisted Isomorphic Application Engine for Embedded, Console, Mobile, Server and Desktop

lychee.js Mono Repository Important Notes to follow through Installation Quirks: The lycheejs-engine Repository needs to be installed to the path /opt

Cookie Engineer 791 Dec 31, 2022
📦🔐A lightweight private proxy registry build in Node.js

Version 6 (Development branch) Looking for Verdaccio 5? Check branch 5.x. Verdaccio is a simple, zero-config-required local private npm registry. No n

Verdaccio 14.3k Dec 31, 2022
API Services Made Easy With Node.js

Nodal API Services Made Easy with Node.js View the website at nodaljs.com. Nodal is a web server and opinionated framework for building data manipulat

Keith Horwood 4.5k Dec 26, 2022
The React Framework

Next.js Getting Started Visit https://nextjs.org/learn to get started with Next.js. Documentation Visit https://nextjs.org/docs to view the full docum

Vercel 98.6k Jan 5, 2023
A progressive Node.js framework for building efficient, scalable, and enterprise-grade server-side applications on top of TypeScript & JavaScript (ES6, ES7, ES8) 🚀

A progressive Node.js framework for building efficient and scalable server-side applications. Description Nest is a framework for building efficient,

nestjs 53.2k Dec 31, 2022
Fast and low overhead web framework, for Node.js

An efficient server implies a lower cost of the infrastructure, a better responsiveness under load and happy users. How can you efficiently handle the

Fastify 26k Jan 2, 2023
🚀 The Node.js Framework highly focused on developer ergonomics, stability and confidence

Sponsored by FOSS United is a non-profit foundation that aims at promoting and strengthening the Free and Open Source Software (FOSS) ecosystem in Ind

AdonisJS Framework 13.4k Dec 31, 2022
Marble.js - functional reactive Node.js framework for building server-side applications, based on TypeScript and RxJS.

Functional reactive Node.js framework for building server-side applications, based on TypeScript and RxJS. Ecosystem Name Description @marblejs/core F

Marble.js 2.1k Dec 16, 2022
Fast, unopinionated, minimalist web framework for node.

Fast, unopinionated, minimalist web framework for node. const express = require('express') const app = express() app.get('/', function (req, res) {

null 59.5k Jan 5, 2023