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