数据说话:2019年10大 Node.js 框架

Posted 4字节

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据说话:2019年10大 Node.js 框架相关的知识,希望对你有一定的参考价值。



翻译/编辑:4字节

想必大家已经读过这一类文章,其中不少实为推广,不少带有偏见,但本文所推荐的10个 Node.js 框架是根据 npmjs.com 上的每日下载量排名所总结出来的。

首先来说说什么是 node.js 框架,以及如何为你的应用选择正确的框架。你需要考虑的因素有二:

1, 框架的可扩展性和健壮性

2, 框架的开发流程是否让你觉得舒适

不论一个框架的可扩展性与健壮性如何,它都是建立在 http模块之上的,其中有一些框架添加进去的东西太多,这对服务器的吞吐量造成了巨大的影响。

在我看来,如果你正在开发的服务业务逻辑规模较小但需要很好的扩展性时,Express.js 或者 Fastify.js 等框架最为合适。但如果你所开发的是中大型规模的应用程序,则最好选择一个能帮助你拥有清晰结构的框架,比如 next.js 或者 loopback。

框架的选择没有唯一解,看看下文的分析再根据实际情况做决定吧!

10. Adonis

Adonis 是一个MVC 模式的 node.js 框架,它借鉴了依赖注入与服务供应商的概念,能够通过 JWT 验证和数据库访问构建 API Rest。

这个框架有什么用?

Adonis.js 的好处就是该框架附带了一个脚手架工具 adonis-cli,可用来创建引导程序。

 
   
   
 
  1. $ npm i -g @adonisjs/cli

  2. $ adonis new adonis-tasks

  3. $ adonis serve --dev

一个典型的 Adonis 应用具有 MVC 结构,这样你就不用再浪费时间去思考如何构架 web 服务器。

9. Feathers

Feather.js 是一个轻量级的 REST 和实时 API 层,多亏了它的 socket.io插件,下面的代码就是你设置 API REST + 实时 WebSockets 连接所需的全部代码:

 
   
   
 
  1. const feathers = require('@feathersjs/feathers');

  2. const express = require('@feathersjs/express');

  3. const socketio = require('@feathersjs/socketio');

  4. const memory = require('feathers-memory');

  5. // Creates an Express compatible Feathers application


  6. const app = express(feathers());

  7. // Parse HTTP JSON bodies


  8. app.use(express.json());

  9. // Parse URL-encoded params


  10. app.use(express.urlencoded({ extended: true}));

  11. // Add REST API support


  12. app.configure(express.rest());

  13. // Configure Socket.io real-time APIs


  14. app.configure(socketio());

  15. // Register a messages service with pagination


  16. app.use('/messages', memory({

  17. paginate: {

  18. default: 10,

  19. max: 25

  20. }

  21. }));

  22. // Register a nicer error handler than the default Express one


  23. app.use(express.errorHandler());

  24. // Add any new real-time connection to the `everybody` channel


  25. app.on('connection', connection => app.channel('everybody').join(connection));

  26. // Publish all events to the `everybody` channel


  27. app.publish(data => app.channel('everybody'));

  28. // Start the server


  29. app.listen(3030).on('listening', () =>

  30. console.log('Feathers server listening on localhost:3030')

  31. );

8. Sails

在7年的时间内逐渐成熟,久经实践考验的 Sails web 框架你绝对应该知道。Sails.js 带有 CLI 工具,4个步骤帮助你启动:

 
   
   
 
  1. $ npm install sails -g

  2. $ sails new test-project

  3. $ cd test-project

  4. $ sails lift

7. Loopback

背后有着 IBM 的支持,Loopback 是一个企业级的 node.js 框架,被多家大型互联网公司例如 GoDaddy,Symantec 和 IBM 使用。Loopback 甚至提供18个月的长期支持(LTS)。该框架带有一个 CLI 工具来搭建你的 node.js 服务器。

 
   
   
 
  1. $ npm i -g @loopback/cli

随后创建项目:

 
   
   
 
  1. $ lb4 app

API 路由与控制器如下图所示:

 
   
   
 
  1. import{get} from '@loopback/rest';


  2. exportclassHelloController{

  3. @get('/hello')

  4. hello(): string {

  5. return'Hello world!';

  6. }

  7. }

6. Fastify

Fastify.io 是一个旨在取代 Express.js 的 node.js 框架,其性能相比 Expressjs 提高了65%。

 
   
   
 
  1. // Require the framework and instantiate it

  2. const fastify = require('fastify')({

  3. logger: true

  4. })


  5. // Declare a route

  6. fastify.get('/', (request, reply) => {

  7. reply.send({ hello: 'world'})

  8. })


  9. // Run the server!

  10. fastify.listen(3000, (err, address) => {

  11. if(err) throw err

  12. fastify.log.info(`server listening on ${address}`)

  13. })

5. Restify

Restify 声称自己是 Node.js 的未来。目前使用此框架的公司和项目包括 NPM,Netflix,Pinterest 和 Napster。

设置 Restify.js 服务器非常简单,下面是代码示例:

 
   
   
 
  1. const restify = require('restify');


  2. function respond(req, res, next) {

  3. res.send('hello '+ req.params.name);

  4. next();

  5. }


  6. const server = restify.createServer();

  7. server.get('/hello/:name', respond);

  8. server.head('/hello/:name', respond);


  9. server.listen(8080, function() {

  10. console.log('%s listening at %s', server.name, server.url);

  11. });

4. Nest.js

这是一个相对较新的 node.js 框架,Nest.js 的结构类似于 Angular.io,因此如果你对 Angular 前端框架很熟悉,使用 Nest 开发应该是得心应手,下面是一段示例代码:

 
   
   
 
  1. import{ NestFactory} from '@nestjs/core';

  2. import{ AppModule} from './app.module';


  3. async function bootstrap() {

  4. const app = await NestFactory.create(AppModule);

  5. app.setViewEngine('hbs');

  6. await app.listen(3000);

  7. }

  8. bootstrap();

3. Hapi

Node.js 世界中的3个框架之一,它的生态中具有丰富的库和插件,这让 Hapi 框架实现高度自定义化。

虽然多年开发中我并没有在产品中用 Hapi,但我这几年一直在用它的验证模块 joi.js。一个 hapi.js 的web服务器配置是这样的:

 
   
   
 
  1. constHapi= require('@hapi/hapi');


  2. const init = async () => {


  3. const server = Hapi.server({

  4. port: 3000,

  5. host: 'localhost'

  6. });


  7. await server.start();

  8. console.log('Server running on %s', server.info.uri);

  9. };


  10. init();

2. Koa

Koa 框架由 Express.js 的团队设计,后者是目前最受欢迎也是最常用的 node.js 框架。

Koa 的目标是成为 web 应用的一个,相比 Express.js 体积更小,更富表现力和健壮性更强的基础。通过生成器 generator 的以小博大,Koa 允许开发者完全摒弃回调,并且大大提高错误处理能力。

Koa 在核心内没有捆绑任何中间件,它提供了一套优雅的服务器编写方法,让过程变得敏捷又容易:

 
   
   
 
  1. constKoa= require('koa');

  2. const app = newKoa();

  3. app.use(async ctx => {

  4. ctx.body = 'Hello World';

  5. });

  6. app.listen(3000);

1. Express

Express.js 是当之无愧的 Node.js 框架之王,在2019年年底它将能达到每日2百万次的下载量。

虽然 Express 是一个年龄更老的框架,但它由强大的社区积极维护,并且被 Uber,IBM,Mulesoft 等大公司使用。

向你的 node.js 项目中添加 Express 的代码是:

$ npm install express

然后声明一些 API 路径:

 
   
   
 
  1. const express = require('express')

  2. const app = express()

  3. const port = 3000


  4. app.get('/', (req, res) => res.send('Hello World!'))


  5. app.listen(port, () => console.log(`Example app listening on port ${port}!`))

结论

Node.js 的框架成千上万,在不清楚哪个更好的情况下最好的办法就是多尝试一些,找到最符合自己需求的那一个。

就个人而言,我更喜欢 Express.js,因为通过过去6年的 node.js 开发,基于反复的试验,我对良好的架构有清晰的认知,也欢迎各位朋友讨论和指正。







以上是关于数据说话:2019年10大 Node.js 框架的主要内容,如果未能解决你的问题,请参考以下文章

Node.js学习8~10款基于nodejs的主流web框架排名及介绍

大淘宝技术 Noslate 正式开源 - 面向云原生的 JavaScript 容器方案

10 款 Node.js 框架,可用于你的下一个项目

2019 年,如何成为更好的 Node.js 开发者?

技术2015年需要了解的前端框架和语言

在2019年,如何成为更好的Node.js开发者?