2017-04-07 34 views
0

我正在调用我的REST API,但是让第一次调用返回一个空数组,第二次调用它只返回所需的结果。这里是我的文件。为什么我没有在首次调用我的REST API时获取数据

mongodb.js用于连接到MongoDB的数据库

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

你为什么要在请求本身检查'statusCode'? –

+0

我不认为在这里检查请求代码很重要。关键是我必须使res.send()与getUsers.getUser()同步,以便它在getUsers.getUser()完成其任务时执行 –

回答

0

data函数在数据实际ret之前调用回调函数urned。正确的实现应该是:

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]) 

跳过错误的说法会给你很多的痛苦,尤其是当你需要整合与第三方库。

+0

非常感谢很多,它为我工作。 –

相关问题