koa + sequelize ,到底该怎么结合? 有前辈用过么?
发布于 9 年前 作者 zhfish 8053 次浏览 最后一次编辑是 8 年前 来自 问答

求推荐可以用在koa里的orm… 但找过一些例子,发现他们用sequelize就是直接yield就行了的… 我初始化如下 connect.js

exports = module.exports;
var Sequelize = require('sequelize');
var sequelize = new Sequelize('mysql://root:toor$@127.0.0.1:3306/dev', {
    define: {
        timestamps: false,
        freezeTableName : true
  }
});

var Models = require('../models');

exports.Invite = Models.Invite(sequelize,Sequelize);
exports.client = sequelize;

在koa的route里…

var a = yield connect.Invite.findOne({where:{Mobile: '13800138000'}});
console.log(a);

报错

    var a = yield connect.Invite.findOne({where:{Mobile: '13800138000'}});
                  ^^^^^^^
SyntaxError: Unexpected identifier
    at exports.runInThisContext (vm.js:73:16)
    at Module._compile (module.js:443:25)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)

同样的位置, 官方demo的用法是ok的

    var a = connect.Invite.findOne({where:{Mobile: '13800138000'}}).then(function(res) {
        console.log(res.get());
    });
    console.log(a);
2 回复

你是不是yield connect…所在的函数不是generator? 要声明成:

function* xxx(){
	var a = yield connect.Invite.findOne({where:{Mobile: '13800138000'}});
	console.log(a);
}

谢谢提点… 我在koa 的route里直接用没问题了,是一个generator

比如在route里调用方法a, a里面又根据数据,分流到方法b, 那么我route调用a,a调用b, 所以a和b都要写成generator,并且field调用, 在b里面yield connect.Invite.findOne({where:{Mobile: ‘13800138000’}}); 也没问题了

这样的写法正确么? 感觉确实比用回调性能要低. 提交同样的数据,到返回结果, expressjs用回调平均时间20ms, koa用field平均时间30ms

回到顶部