Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何将数据同步插入mongo(Nodejs、Express)_Node.js_Mongodb_Express_Asynchronous_Synchronous - Fatal编程技术网

Node.js 如何将数据同步插入mongo(Nodejs、Express)

Node.js 如何将数据同步插入mongo(Nodejs、Express),node.js,mongodb,express,asynchronous,synchronous,Node.js,Mongodb,Express,Asynchronous,Synchronous,我在使用node(express)向mongo db插入数据时遇到问题 我的代码如下所示: router.get('/data/:section/:sort', function(req, res, next) { //Deleting old data always before writing new //Image.remove().exec(); var section = req.params.section; var sort = req.params.sort; //Link to

我在使用node(express)向mongo db插入数据时遇到问题

我的代码如下所示:

router.get('/data/:section/:sort', function(req, res, next) {
//Deleting old data always before writing new
//Image.remove().exec();
var section = req.params.section;
var sort = req.params.sort;
//Link to Igmur API
var url = 'https://api.imgur.com/3/gallery/'+section+'/'+sort+'/1'; //1 at the end is used to get more than 60 images(gives only 60 without it)
    request.get({
    url: url,
    method: 'GET',
    headers: {
        'Authorization': 'Client-Id XXXXXXXXXXXXX'
    }}, function(e, r, body){
var metadata = JSON.parse(body);
for(var i = 0; i<100; i++){
        var image = new Image(metadata.data[i])
        image.save(function(err, result){
        });
};res.render('index', { title: 'SearchAPI' });});});
router.get('/data/:section/:sort',函数(req,res,next){
//总是在写入新数据之前删除旧数据
//Image.remove().exec();
var区段=请求参数区段;
var sort=req.params.sort;
//链接到igmurapi
var url='1〕https://api.imgur.com/3/gallery/“+section+'/'+sort+'/1';//末尾的1用于获取60多个图像(如果没有它,则仅提供60个)
请求({
url:url,
方法:“GET”,
标题:{
“授权”:“客户Id XXXXXXXXXXXX”
}},功能(e、r、主体){
var metadata=JSON.parse(body);

对于(var i=0;i使用承诺库,如

基本上,您需要做的是等待所有的
save
方法完成。使用
Q.all
方法等待所有操作的执行

var Q = require('q');

var promiseArr = [];

for(var i = 0; i<100; i++){
        var imgDefer = Q.defer();
        var image = new Image(metadata.data[i])
        image.save(function(err, result){
             if(err)imgDefer.reject(err);
             else imgDefer.resolve()
        });
       promiseArr.push(imgDefer);
}
Q.all(promiseArr).then (function (){
    res.render('index', { title: 'SearchAPI' });
})
var Q=require('Q');
var promiseArr=[];

对于(var i=0;i反复调用数据库是错误的做法,最好使用
create
并立即传递所有内容。请查看下面的代码片段。希望它能有所帮助

router.get('/data/:section/:sort', function(req, res, next) {
  //Deleting old data always before writing new
  //Image.remove().exec();
  var section = req.params.section;
  var sort = req.params.sort;
  //Link to Igmur API
  var url = 'https://api.imgur.com/3/gallery/'+section+'/'+sort+'/1'; //1 at the end is used to get more than 60 images(gives only 60 without it)
  request.get({
    url: url,
    method: 'GET',
    headers: {
    'Authorization': 'Client-Id XXXXXXXXXXXXX'
  }}, function(e, r, body){
    var metadata = JSON.parse(body);

    Image.create(metadata.data,(err, result)=>{
      //do operations here
      res.render('index', { title: 'SearchAPI' });
    })

    /* WRONG PRACTICE */
    // for(var i = 0; i<100; i++){
    //   var image = new Image(metadata.data[i])
    //   image.save(function(err, result){

    //   });
    // };

  });
});
router.get('/data/:section/:sort',函数(req,res,next){
//总是在写入新数据之前删除旧数据
//Image.remove().exec();
var区段=请求参数区段;
var sort=req.params.sort;
//链接到igmurapi
var url='1〕https://api.imgur.com/3/gallery/“+section+'/'+sort+'/1';//末尾的1用于获取60多个图像(如果没有它,则仅提供60个)
请求({
url:url,
方法:“GET”,
标题:{
“授权”:“客户Id XXXXXXXXXXXX”
}},功能(e、r、主体){
var metadata=JSON.parse(body);
Image.create(metadata.data,(err,result)=>{
//在这里做手术
res.render('index',{title:'SearchAPI'});
})
/*错误做法*/

//对于(var i=0;ibtw,独立应用程序一切正常。但在express中,它出错了异步/等待将在现在的js中起作用:)我不知道为什么,但它仍然只给我插入了20行:但我知道输入数据有650行,我只需要100行,我只是个白痴xD使用mongo cmd检查所有插入,所以它只给了我前20行,然后“键入更多”我没有注意到:D Thanx您的代码工作正常!但我认为我的代码工作正常,而您的代码也工作正常,但是响应抛出的时间比它应该的时间早得多。如果您的响应需要来自图像的内容,那么您可能会遇到问题。