Nodejs框架选择求助,同学们帮忙选一下吧,望大家推荐

Nodejs框架选择求助,同学们帮忙选一下吧,望大家推荐

用Nodejs多嵌入式有一段时间了。本人原是做python的,现在打算全面转nodejs,所以现在需要在项目中使用靠谱的mvc框架和orm框架。我在网上找了很多,发现现在nodejs还没有具有绝对优势的框架,可选的框架很多,所以请使用过的同学帮忙评价一下,使用哪个比较靠谱:

  • 类MVC的框架: sails geddy 我现在感觉做的比较全面的就这两了个, sails基于express我比较倾向,但是实现完整度来说还是geddy比较好。

  • ORM:上面提到的框架都有自己的ORM实现,另外成熟的ORM框架还有 orm2 sequelizejs persistencejs 他们基本的功能都实现了,包括关联,nosql的支持,个人感觉sequelizejs实现的较完整。

毕竟还没有实践过,所以打算请教一下用过的同学们,哪个比较好?


7 回复

当然可以!Node.js 生态系统中有许多优秀的框架和 ORM 库供你选择。下面我会根据你的需求,为你推荐一些合适的框架,并提供一些示例代码以帮助你更好地理解。

类 MVC 框架

Sails.js

Sails.js 是一个基于 Express 的 MVC 框架,它提供了很多现代 Web 应用所需的特性,如实时功能、模型关联、RESTful API 支持等。Sails.js 是我推荐的一个选择,因为它基于 Express,社区支持广泛,文档也很丰富。

安装 Sails.js

npm install -g sails

创建一个新的 Sails 项目

sails new my-app
cd my-app

启动 Sails.js 应用

sails lift

示例代码: 假设你要创建一个简单的用户模型和控制器。

// api/models/User.js
module.exports = {
  attributes: {
    name: { type: 'string' },
    email: { type: 'string', unique: true }
  }
};

// api/controllers/UserController.js
module.exports = {
  create: function (req, res) {
    User.create(req.body).fetch().then(user => {
      return res.ok(user);
    }).catch(err => {
      return res.serverError(err);
    });
  }
};

ORM 框架

Sequelize.js

Sequelize 是一个非常强大的 ORM,支持多种数据库(如 MySQL, PostgreSQL, SQLite 等)。它提供了丰富的功能,如事务管理、查询构建器等。

安装 Sequelize

npm install --save sequelize
npm install --save mysql2

初始化 Sequelize

const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql'
});

(async () => {
  try {
    await sequelize.authenticate();
    console.log('Connection has been established successfully.');
  } catch (error) {
    console.error('Unable to connect to the database:', error);
  }
})();

定义模型

const User = sequelize.define('User', {
  name: {
    type: Sequelize.STRING,
    allowNull: false
  },
  email: {
    type: Sequelize.STRING,
    allowNull: false,
    unique: true
  }
}, {
  timestamps: true
});

创建记录

(async () => {
  await User.create({
    name: 'John Doe',
    email: 'john.doe@example.com'
  });
})();

希望这些示例能帮助你更好地理解和选择适合你的框架和 ORM。如果你有更多问题或需要进一步的帮助,请随时提问!


web方面,如果不想让设备被玩残的话,那就不要用express系的框架,不要用任何基于http的框架,node.js的web框架在安全方面一塌糊涂。对于小设备来说,我更倾向于采用nginx + websocket的组合来搭建网站,确切的说,是nginx + socket.io。涉及到设备间通讯的时候,再加上一个socket.io-client。不使用任何http get/post之类的方法,一定要彻底防止内存或tmp分区被爆

orm方面,我不建议使用,毕竟设备不是PC,资源有限,写数据的速度和功耗也很糟糕,对存储的访问需要非常克制。用json已经足够了,平时作为内存里的js对象,需要存储的时候做个JSON.stringify(obj),保存成文件,就足够了。

感谢您的回复。我的问题没有问清楚,造成了误解,在嵌入式中使用nodejs已经有一段时间了,这块自然是不会使用什么框架的,而且我们处理都是串口信息。我现在要在网站项目中使用nodejs了(我本人也是做网站开发的),所以在想要使用什么框架,所以我的问题的环境是正常的服务器环境的,不是嵌入式设备。

compound: mvc + orm 加上比较完整脚手架rails构建体系

orm2: 不倾向于分开选择orm和mvc,那不是意味着要自己做或者在选择一套脚手架。

bookshelf: orm,著名的ghost博客系统使用的backbone+promise形态的orm,这个是最近偶尔看到,不用的原因跟上面orm2差不多

sails: 比较新一代的mvc框架,思想体现为前后分离,直接从数据库到上层接口一次性生成。但是我们当时项目开始的时候发现没有联合查询,所以直接放弃了,但是现在看来根本也没什么太多的联合查询的需求。

geddy: 我就不知道了,看起来感觉一般啊

Meteor: 勇敢者游戏,超级新概念框架,超牛逼,看Star就知道了,他们服务器端的设计是完全脱离程序级别的,是非常高级抽象。

Derby: 跟meteor类似,不过弱了很多,其实sails的概念就是Meteor和Derby概念的一半。Derby依赖的他们自己实现的racer项目就跟sails感觉类似,

我们最后选择了用compound框架,好处是开发起来快,因为rails体系大家比较熟,单元测试集成测试什么都生成的差不多了。坏处是他们的mysql-adapter不是很好,主要是主键不支持字符串,我们自己改了改。

如果让我重新选择,我可能会选择sails,看过他们源代码,很精巧,安全也做得不错。

我现在在做BPO方面的开发,用的是 nginx + socket.io + redis + knockout.js ,没有用框架,除了少数存档数据外几乎没有用数据库,一切为了性能。当然这不符合一般的应用需求。

express 安全性不好?!

在选择 Node.js 框架时,确实需要考虑多个因素,比如项目的复杂性、团队的经验以及具体需求等。以下是一些针对您提到的需求的建议:

MVC 框架

  1. Sails.js

    • Sails.js 是一个基于 Express 的现代 web 应用框架,它提供了完整的 MVC 结构。
    • Sails.js 提供了许多内置功能,如数据库连接、权限管理、表单验证等。
    • 示例代码:
      // 安装 Sails.js
      npm install -g sails
      sails new myapp
      cd myapp
      sails lift
      
    • 优点:提供了完善的文档和支持,易于上手。
    • 缺点:可能对于小型项目来说显得有些笨重。
  2. Geddy

    • Geddy 是一个轻量级的 MVC 框架,与 Rails 风格类似。
    • 示例代码:
      // 安装 Geddy
      npm install geddy -g
      geddy app myapp
      cd myapp
      geddy server
      
    • 优点:轻量级,适合快速原型开发。
    • 缺点:社区和文档支持不如 Sails.js 多。

ORM 框架

  1. Sequelize.js

    • Sequelize 是一个强大的 ORM,支持多种 SQL 数据库(如 MySQL, PostgreSQL 等)。

    • 示例代码:

      // 安装 Sequelize
      npm install sequelize --save
      npm install mysql2 --save
      // 初始化 Sequelize
      const { Sequelize, DataTypes } = require('sequelize');
      const sequelize = new Sequelize('database', 'username', 'password', {
        host: 'localhost',
        dialect: 'mysql'
      });
      
      const User = sequelize.define('User', {
        name: DataTypes.STRING,
        age: DataTypes.INTEGER
      });
      
      // 连接数据库
      async function run() {
        await sequelize.authenticate();
        console.log('Connection has been established successfully.');
      }
      
      run();
      
    • 优点:功能强大,支持复杂的查询和事务处理。

    • 缺点:学习曲线稍陡,文档相对较多。

  2. Orm2

    • Orm2 是一个轻量级的 ORM,也支持 SQL 数据库。

    • 示例代码:

      // 安装 orm2
      npm install orm2 --save
      // 初始化 orm2
      var orm = require('orm');
      
      orm.connect("mysql://user:pass@localhost/mydb", function (err, db) {
        if (err) throw err;
      
        var User = db.define("users", {
          name: String,
          email: String
        });
      
        db.sync(function (err) {
          if (err) throw err;
          console.log("Database synced");
        });
      });
      
    • 优点:简单易用。

    • 缺点:功能相对较少,不支持某些高级特性。

综合考虑,如果你希望使用一个成熟的、功能强大的框架,Sails.js + Sequelize.js 可能是最好的选择。如果你希望保持轻量级且易于上手,可以尝试Geddy + Orm2。根据你的具体需求来选择最适合的框架组合。

回到顶部