我正在调用我的REST API,但在第一次调用时返回一个空数组,在第二次调用时只返回所需的结果。这是我的文件。
用于连接mongodb数据库的mongodb.js
var MongoClient =require('mongodb').MongoClient;
var dburl = 'mongodb://localhost:27017/test';
module.exports.connect = function connect(callback){
MongoClient.connect(dburl, function(err, conn){
/* exports the connection */
if(err)
{
callback(err);console.log(err)
}
else
{
callback(undefined,conn.collection('person'));
//console.log(conn)
}
});
};
getUsers.js用于从数据库中检索文档
const mongodb = require('.././mongodb/mongodb');
var v=[];
module.exports.getUser=function(callback)
{
mongodb.connect(function(err,db)
{
if (err)
{
console.log(err)
}
else
{
data(db,function (docs) {
//console.log(v)
callback(v)
})
// console.log(v)
}
});
}
function data(db,callback) {
db.find().forEach((docs)=>{
v.push(docs)
})
callback(v);
}
server.js用于启动服务器
const express = require('express');
const bodyparser = require('body-parser')
const getUsers = require('./users/getUsers');
const insertUsers = require('./users/insertUsers');
const findUsers = require('./users/findUsersEmail');
const delusers=require('./users/deleteUsers')
const moduser=require('./users/updateUser')
const app = express();
app.use(bodyparser.json())
app.get('/person', (req, res) =>
{ console.log(res.statusCode)
if(res.statusCode==200)
{
getUsers.getUser(function (userList){
res.json(userList);
console.log(userList);
})
}})
app.listen(4569,()=>console.log('server has started on 4501'))
答案 0 :(得分:0)
因为您的data
函数在实际返回数据之前调用了回调。正确的实施应该是:
const mongodb = require('.././mongodb/mongodb');
module.exports.getUser = function(callback) {
mongodb.connect(function(err, db) {
if (err) {
console.log(err);
} else {
data(db, callback);
}
});
}
function data(db, callback) {
db.find().toArray((err, docs) => callback(docs));
}
您可以看到根本没有使用全局变量v
。
顺便说一下,您应该遵循NodeJS约定来实现回调函数:
callback(err[, ...args])
当您的代码库增长时,跳过错误参数会给您带来很多痛苦,尤其是当您需要与第三方库集成时。