Nodejs:Koa or Express?
Nodejs:Koa or Express?
如果重写一个类 Nodeclub 的项目,基础框架如何选择:
Koa vs. Express
选用 Koa 可以利用 Node harmony 的 generators 特性来写出没有 callback 的代码,但是增加了学习成本,倒不是 generator 的写法,而是新的思维方式,担心会写出不能发挥 harmony 全部潜能的夹生代码
如果使用 Express ,配合 Bluebird ,也可以写出不那么恐怖的流程控制,假如前段使用 Angular.js ,也是使用类似的 Promise 实现,这样写来前后端不存在思维转换的问题
Mongoose vs. Sequelize
这个倒是没多少纠结,就是非关系型数据库(MongoDB)跟关系型数据库(Mysql、MariaDB、PostgreSQL)的选择
本人并没有多少数据库使用经验,而且一向的观点就是够用就行,如果文件数据库(Sqlite、LevelDB)能满足需求就不上需要额外运行服务的数据库。不过个人倾向于后者,如果选用现在大行其道的 MongoDB ,又会纠结于如何设计出符合 NoSQL 理念的数据库
Nodejs:Koa or Express?
Koa vs. Express
当你决定重写一个类 Nodeclub 的项目时,选择合适的Web框架至关重要。这里主要讨论两个流行的框架:Koa 和 Express。
1. Koa
Koa 是由 Express 团队开发的一个下一代web框架,它使用了最新的ES6特性如 generators
,这使得编写异步代码变得更为简洁。例如:
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
然而,使用 Koa 也意味着你需要掌握新的编程范式,即异步编程中的生成器和 async/await
。对于开发者来说,这可能需要一些时间去适应。此外,虽然 Koa 提供了更灵活的中间件处理方式,但这也可能增加理解和调试代码的难度。
2. Express
Express 是一个成熟且广泛使用的web框架,它的社区庞大,文档详尽,插件丰富。如果你已经熟悉传统的回调函数或Promise,Express 可以通过结合 Bluebird
等库轻松实现非阻塞的异步代码。例如:
const express = require('express');
const app = express();
const Promise = require('bluebird');
app.get('/', (req, res) => {
Promise.resolve().then(() => {
res.send('Hello World');
});
});
app.listen(3000);
使用 Express 的一大优势在于其稳定性和易用性,特别是对于那些已经习惯于传统回调或Promise风格的开发者来说。此外,Express 生态系统非常丰富,可以轻松找到各种中间件来满足你的需求。
Mongoose vs. Sequelize
关于数据库选择,这取决于你的具体需求。如果你正在处理的是非关系型数据库如 MongoDB,那么 Mongoose
是一个不错的选择。它提供了良好的数据模型定义和验证功能。例如:
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true });
const UserSchema = new mongoose.Schema({
name: String,
age: Number
});
const User = mongoose.model('User', UserSchema);
// 创建新用户
const newUser = new User({ name: 'John Doe', age: 30 });
newUser.save();
另一方面,如果你需要处理关系型数据库如 MySQL 或 PostgreSQL,Sequelize
是一个很好的选择。它支持复杂的查询和事务管理。例如:
const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize('sqlite::memory:');
const User = sequelize.define('User', {
name: {
type: DataTypes.STRING,
allowNull: false
},
age: DataTypes.INTEGER
});
(async () => {
await sequelize.sync();
const user = await User.create({ name: 'Jane Doe', age: 25 });
})();
总之,选择 Koa 还是 Express,取决于你对新技术的接受程度以及团队的技术栈。而 Mongoose 和 Sequelize 则分别适用于不同的数据库类型。
bluebird挺好的,通过promisifyAll和第三方模块也非常容易集成。 另外bluebird准确地说只是Promise Library而不是流程控制模块
建议使用koa,我们公司现在生产环境上的项目已经是用koa来写了,如果要用koa重写加我一个
业余项目必然koa啊
:-O 我支持koa。
koa之后,再无express。特别是koa实现了真正意义上的middleware,如果大家写过connect或者express的中间件,有一些需求不通过hack方式是无法实现的。
未来趋势是越来越多库支持promise,那么它默认就是对koa友好的,无需再写一个co wrapper了
我昨天已经用 Express搭了一个框架,看了大家的评论,决定就用 Koa 吧,其实我之前主要担心的是前后端的思维不一致,现在浏览器端也就 Firefox 支持 generator,使用 Node.js 的一个很大的原因就是前后端的一致性,不知道到什么时候才会实现主流平台的全面支持
至于数据库,Sequelize 基于 Promise 的 2.0 版本还处于 unstable 阶段,api 处于随时可变的阶段,所以还是继续使用 Mongoose 吧
我想用express 但是被强迫用koa了
全线koa,感觉不错。新手慎入。
可以试试 Nokit , nokit.org
mark
既然你都用 Bluebird/Promise 了,Koa 的 yield 也支持使用 Promise 了,而且语法和 ES7 async/await 很接近
来试试AgentK (https://github.com/kyriosli/agentk),最优雅的异步处理方式就是没有异步
可以关平吗。。
请问一下koa中是怎么样将数据库操作、逻辑处理和页面显示分开的那?目前了解到的是这样实现的,都是混在一起的,router.get(’/’, function *(next) { var rows = yield dbHandle.db.query(‘select * from account where studio=?’,[‘全部’]); yield this.render(‘get’, { title: rows[0].userName }); });
make<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
make<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
make<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
make<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
make<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
make<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
针对 “Nodejs: Koa or Express?” 这个问题,我们可以从几个角度来讨论这两个框架的特点以及各自的适用场景。
Koa vs. Express
Koa
Koa 是由 Express 团队开发的新一代 Web 框架,它主要的目标是通过使用 ES6 的 generators
来简化回调地狱,并提供更轻量级的中间件系统。以下是一个简单的 Koa 应用示例:
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
Express
Express 是一个成熟的 Web 框架,提供了强大的路由功能和丰富的中间件生态系统。如果你已经熟悉了回调函数或者 Promise,Express 将会是一个更易上手的选择。以下是使用 Express 的简单示例:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World');
});
app.listen(3000);
前后端一致性
如果你的前端使用的是基于 Promise 的框架(如 Angular.js),那么在服务器端也使用类似的概念可以保持一致性,减少思维上的转换。对于 Express,你可以通过结合如 bluebird
这样的库来处理异步操作:
const Promise = require('bluebird');
const express = require('express');
const app = express();
app.get('/', async (req, res) => {
await Promise.delay(1000); // 模拟异步操作
res.send('Hello World');
});
app.listen(3000);
结论
选择 Koa 还是 Express 主要取决于你的团队熟悉度和技术栈的一致性。如果你对 generators
感兴趣,并希望尝试一种新的编程范式,Koa 是一个不错的选择。但如果你寻求快速启动并拥有大量的中间件支持,Express 则更为合适。