在我的节点js

时间:2017-10-05 07:33:39

标签: mongodb ecmascript-6 mean-stack

我正在研究MEAN堆栈以创建一些Web服务。 我想过使用ES6同步mongodb查找操作。 这是代码(UserService):

var Todo = require('../models/user.js');
var db = mongoose.createConnection('mongodb://localhost:27017/abc');
var Users = db.model('User');


function *myGenerator() {
   return yield Todo.find({});//Throwing Undefined function Todo.find
   //return yield Users.find({}); //DOes not returns documents but returns a json object which has full mongodb database details
}

function getDocs(){
   var iterator = myGenerator();
   var firstYield = iterator.next();
}

return yield Todo.find({})正在抛出异常Undefined function Todo.find

return yield Users.find({});不返回文档但返回一个具有完整mongodb数据库详细信息的JSON对象

return yield Users.find({}).exec()返回以下输出

{ value:
Promise {
emitter:
EventEmitter {
domain: null,
_events: {},
_eventsCount: 0,
_maxListeners: undefined },
emitted: {},
ended: false },
done: false }

PS:我也使用了--harmony节点js选项。

你能帮助我获取用户行/文件吗?

2 个答案:

答案 0 :(得分:1)

Todo.find({});会返回Query个对象。您必须在该对象上调用exec函数才能执行查询。的 e.g。

Todo.find({}).exec(function (error, docs) {
    if (error) {
        // handle
    }

    if (docs) {
        // yeah !!!
    }
})

mongoose数据库连接也是异步的。因此,在建立连接之前进行的任何查询显然都不会起作用。这是一个有效的例子。

var mongoose = require('mongoose');
mongoose.Promise = Promise;

var db = mongoose.connect('mongodb://localhost:27017/test', (error) => {

  if (error) {
    throw error
  }

  console.log('DB Connected');

  var Todo = require('./models/user.js');

  var Users = db.model('User');


  function *myGenerator() {
    yield Todo.find({}); // Returns a Query object
    //yield Users.find({}); // Returns a Query object
  }

  function getDocs(){
    var iterator = myGenerator();
    var firstYield = iterator.next();

    // firstYield is a `Query` object

    firstYield.value.exec((error, users) => {
      if (error) {
        throw error;
      }

      console.log(users);
    })
  }

  getDocs();
});

答案 1 :(得分:0)

<div class="sectionPhotographer"> <table> <tr> <td> <img src="https://lorempixel.com/400/100/"> </td> <td> <h1>Turn your pictures into profits</h1> </td> </tr> </table> </div>生成var Todo = requires('models/user.js'); 应为ReferenceError: requires is not defined

甚至可能 var Todo = require('models/user.js');因为var Todo = require('./models/user.js');相对于'models/user.js'目录

node_modules 应为return yield Todo.find({});

据我所知,代码会抛出异常。 请提供实际代码以及更多信息,例如您当前正在运行的yield Todo.find({});版本?

p.S我在答案部分写了这个,因为我还没有在任何地方获得评论