2
我正在使用Node.js,Express,MongoDB和Mongoose。我有一个函数可以获取MongoDB数据库中文档的最大ID号并将其返回给程序。我已经开始模块化我的代码,并已将该功能迁移到另一个模块。我已经成功地访问了我的主模块中的函数,但它涉及异步数据库查询。当该函数返回一个值时,我想将其分配给一个变量。不幸的是,当返回的值被分配给变量时,变量实际上被设置为undefined。我正在考虑使用事件发射器来表示查询已完成,但也提出了两个问题:Node.js使变量等待分配,直到回调函数完成
1)我不认为你可以在程序之后做任何事情,在返回语句后,这将是什么是必须的。
2)模块之间的事件发射器看起来非常挑剔。
请帮我把变量赋值给正确的值。规范双方的主要功能和模块低于:
(主文件)app.js:
//requires and start up app
var express = require('express');
var mongoose = require('mongoose')
, dbURI = 'localhost/test';
var app = express();
var postmodel = require('./models/post').postmodel;
//configures app for general stuff needed such as bodyParser and static file directory
app.configure(function() {
app.use(express.bodyParser());
app.use(express.static(__dirname + '/static'));
});
//configures app for production, connects to mongoLab databse rather than localhost
app.configure('production', function() {
dbURI = 'mongodb://brad.ross.35:lockirlornie[email protected]:37387/heroku_app6901832';
});
//tries to connect to database.
mongoose.connect(dbURI);
//once connection to database is open, then rest of app runs
mongoose.connection.on('open', function() {
var PostModel = new postmodel();
var Post = PostModel.setupPostSchema();
var largest_id = PostModel.findLargestID(Post);
(模块)post.js:
var mongoose = require('mongoose');
module.exports.postmodel = function() {
this.setupPostSchema = function() {
var postSchema = new mongoose.Schema({
title: String,
body: String,
id: Number,
date_created: String
});
var Post = mongoose.model('Post', postSchema);
return Post;
};
this.findLargestID = function (Post) {
Post.find(function (err, posts) {
if (err) {
console.log("error finding largest ID!");
} else {
var largest_id = 0;
for (var post in posts) {
if (posts[post].id >= largest_id) largest_id = posts[post].id;
}
console.log(largest_id);
return largest_id;
}
});
};
};
只是为了学习,为什么你有null作为第一个参数? –
节点约定是回调的第一个参数总是表示是否有错误。请参阅if(err)块中的'callback(err);'语句。 – JohnnyHK