2014-10-03 5 views
1

Я работаю над своим первым проектом koajs и после того, как понял (или пытался) генераторные функции, урожай, громы и т. Д. Я столкнулся с проблемой мангуста (на которую я сильно полагаюсь). После поиска на форумах, решение было thunkify:KoaJS with Thunkify + Mongoose

CoffeeScript:

Controller = require './basecontroller' 
User = require '../models/user' 

UserController = ((c, User) -> 
    return (
    get: (next) -> 
    userQuery = c.libs.thunkify User.find 
    try 
     users = yield userQuery {} 
     @body = users 
     return 
    catch e 
     console.error "Error: #{e}" 
     throw e 
     return 
    next() 
) 
) Controller, User 

# Export functionality 
module.exports = UserController 

JavaScript:

// Generated by CoffeeScript 1.8.0 
var Controller, User, UserController; 

Controller = require('./basecontroller'); 

User = require('../models/user'); 

UserController = (function(c, User) { 
    return { 
    get: function*(next) { 
     var e, userQuery, users; 
     userQuery = c.libs.thunkify(User.find); 
     try { 
     users = (yield userQuery({})); 
     this.body = users; 
     return; 
     } catch (_error) { 
     e = _error; 
     console.error("Error: " + e); 
     throw e; 
     return; 
     } 
     return next(); 
    } 
    }; 
})(Controller, User); 

module.exports = UserController; 

, который имеет смысл в моей голове ... но я получаю эта ошибка:

14:56:01 web.1 | Error: TypeError: Cannot read property 'discriminatorMapping' of undefined 
14:56:01 web.1 | TypeError: Cannot read property 'discriminatorMapping' of undefined 
14:56:01 web.1 |  at find (/Users/mial/Projekte/MiPa/schuppen4-on-heroku/node_modules/mongoose/lib/model.js:940:18) 
14:56:01 web.1 |  at Object.<anonymous> (/Users/mial/Projekte/MiPa/schuppen4-on-heroku/node_modules/thunkify/index.js:43:12) 
14:56:01 web.1 |  at next (/Users/mial/Projekte/MiPa/schuppen4-on-heroku/node_modules/koa/node_modules/co/index.js:90:21) 
14:56:01 web.1 |  at Object.<anonymous> (/Users/mial/Projekte/MiPa/schuppen4-on-heroku/node_modules/koa/node_modules/co/index.js:45:5) 
14:56:01 web.1 |  at Server.<anonymous> (/Users/mial/Projekte/MiPa/schuppen4-on-heroku/node_modules/koa/lib/application.js:125:8) 
14:56:01 web.1 |  at Server.emit (events.js:110:17) 
14:56:01 web.1 |  at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:491:12) 
14:56:01 web.1 |  at HTTPParser.parserOnHeadersComplete (_http_common.js:111:23) 
14:56:01 web.1 |  at Socket.socketOnData (_http_server.js:343:22) 
14:56:01 web.1 |  at Socket.emit (events.js:107:17) 

... umm. Помогите? :)

ответ

2

Fixed это :)

Controller = require './basecontroller' 
User = require '../models/user' 

UserController = ((c, User) -> 
    User.find = c.libs.thunkify User.find 
    return (
    get: (next) -> 
    try 
     users = yield User.find {} 
     @body = users 
    catch e 
     console.error "Error: #{e}" 
) 
) Controller, User 

# Export functionality 
module.exports = UserController 

Видимо, я должен был "переписать" функцию User.find и определить thunkify до моего модуля шаблона return заявление.


Update: Нет необходимости использовать thunkify с мангуста. Вы можете просто использовать функцию exec, так как это уже санк обещание, которое co также работает с (спасибо @ jmar777):

Controller = require './basecontroller' 
User = require '../models/user' 

UserController = ((c, u) -> 
    return (
    get:() -> 
    try 
     users = yield u.find({}).exec() 
     @body = users 
    catch e 
     console.error e 
) 
) Controller, User 

module.exports = UserController 
+1

Небольшая коррекция: [ '.exec()' возвращает обещание] (HTTP : //mongoosejs.com/docs/api.html#query_Query-exec), с которым также работает 'co'. Рад, что у вас это работает, хотя :) – jmar777

+0

Awesome - приблизиться к пониманию всей магии генератора: D Спасибо @ jmar777! – Michel

Смежные вопросы