我正在研究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选项。
你能帮助我获取用户行/文件吗?
答案 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我在答案部分写了这个,因为我还没有在任何地方获得评论