2015-11-03 54 views
0

我一直在做一个基于TV showTracker的示例,到目前为止我无法在我的网站上看到任何节目。我一直在努力尝试是否犯了一个错误,但我仍然找不到任何东西。那么如何检索这些信息。我已经将这个server.js和mongod分别放在不同的CMD中,并且在另一个CMD中吞噬了我仍然无法获得的任何节目。当我看到响应时,它会显示一个空白数组“[]”,就像这样。那么有什么建议?帮助将不胜感激。 (我已经主持了网站,认为这也有助于我的问题)。净调试错误表示API /表演/ - 响应= []为什么我从我的server.js文件得到空或[]响应?

这里是我的server.jsrespone

var mongoose = require('mongoose'); 
var bcrypt = require('bcryptjs'); 
var express = require('express'); 
var path = require('path'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var session = require('express-session'); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 



var showSchema = new mongoose.Schema({ 
    _id: Number, 
    name: String, 
    airsDayOfWeek: String, 
    airsTime: String, 
    firstAired: Date, 
    genre: [String], 
    network: String, 
    overview: String, 
    rating: Number, 
    ratingCount: Number, 
    status: String, 
    poster: String, 
    subscribers: [{ 
      type: mongoose.Schema.Types.ObjectId, ref: 'User' 
     }], 
    episodes: [{ 
      season: Number, 
      episodeNumber: Number, 
      episodeName: String, 
      firstAired: Date, 
      overview: String 
     }] 
}); 


var userSchema = new mongoose.Schema(
    { 
     email: { type: String, unique: true }, 
     password: String 
    }); 

userSchema.pre('save', function (next) { 
    var user = this; 
    if (!user.isModified('password')) return next(); 
    bcrypt.genSalt(10, function (err, salt) { 
     if (err) return next(err); 
     bcrypt.hash(user.password, salt, function (err, hash) { 
      if (err) return next(err); 
      user.password = hash; 
      next(); 
     }); 
    }); 
}); 

userSchema.methods.comparePassword = function (candidatePassword, cb) { 
    bcrypt.compare(candidatePassword, this.password, function (err, isMatch) { 
     if (err) return cb(err); 
     cb(null, isMatch); 
    }); 
} 

var User = mongoose.model('User', userSchema); 
var Show = mongoose.model('Show', showSchema); 

mongoose.connect('localhost'); 

var app = express(); 

app.set('port', process.env.PORT || 3000); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(session({ secret: 'keyboard cat' })); 
app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.listen(app.get('port'), function() { 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

app.get('/api/shows', function (req, res, next) { 
    var query = Show.find(); 
    if (req.query.genre) { 
     query.where({ genre: req.query.genre }); 
    } else if (req.query.alphabet) { 
     query.where({ name: new RegExp('^' + '[' + req.query.alphabet + ']', 'i') }); 
    } else { 
     query.limit(12); 
    } 
    query.exec(function (err, shows) { 
     if (err) return next(err); 
     res.send(shows); 
    }); 
}); 

app.get('/api/shows/:id', function (req, res, next) { 
    Show.findById(req.params.id, function (err, show) { 
     if (err) return next(err); 
     res.send(show); 
    }); 
}); 

app.post('/api/shows', function (req, res, next) { 
    var apiKey = 'E36B52F7E036AFF3'; 
    var seriesName = req.body.showName 
    .toLowerCase() 
    .replace(/ /g, '_') 
    .replace(/[^\w-]+/g, ''); 
    var parser = xml2js.Parser({ 
     explicitArray: false, 
     normalizeTags: true 

    }); 

    async.waterfall([ 
     function (callback) { 
      request.get('http://thetvdb.com/api/GetSeries.php?seriesname=' + seriesName, function (error, response, body) { 
       if (error) return next(error); 
       parser.parseString(body, function (err, result) { 
        if (!result.data.series) { 
         return res.send(404, { message: req.body.showName + ' was not found.' }); 
        } 
        var seriesId = result.data.series.seriesid || result.data.series[0].seriesid; 
        callback(err, seriesId); 
       }); 
      }); 
     }, 
     function (seriesId, callback) { 
      request.get('http://thetvdb.com/api' + apiKey + '/series/' + seriesId + '/all/en.xml', function (error, response, body) { 
       if (error) return next(error); 
       parser.parseString(body, function (err, result) { 
        var series = result.data.series; 
        var episodes = result.data.episode; 
        var show = new Show({ 
         _id: series.id, 
         name: series.seriesname, 
         airsDayOfWeek: series.airs_dayofweek, 
         airsTime: series.airs_time, 
         firstAired: series.firstaired, 
         genre: series.genre.split('|').filter(Boolean), 
         network: series.network, 
         overview: series.overview, 
         rating: series.rating, 
         ratingCount: series.ratingcount, 
         runtime: series.runtime, 
         status: series.status, 
         poster: series.poster, 
         episodes: [] 
        }); 
        _.each(episodes, function (episode) { 
         show.episodes.push({ 
          season: episode.seasonnumber, 
          episodeNumber: episode.episodenumber, 
          episodeName: episode.episodename, 
          firstAired: episode.firstaired, 
          overview: episode.overview 
         }); 
        }); 
        callback(err, show); 
       }); 
      }); 
     }, 
     function (show, callback) { 
      var url = 'http://thetvdb.com/banners/' + show.poster; 
      request({ url: url, encoding: null }, function (error, response, body) { 
       show.poster = 'data:' + response.headers['content-type'] + ';base64,' + body.toString('base64'); 
       callback(error, show); 
      }); 
     } 
    ], function (err, show) { 
     if (err) return next(err); 
     show.save(function (err) { 
      if (err) { 
       if (err.code == 11000) { 
        return res.send(409, { message: show.name + ' already exists.' }); 
       } 
       return next(err); 

      } 
      res.send(200); 
     }); 
    }); 
}); 

function ensureAuthenticated(req, res, next) { 
    if (req.isAuthenticated()) next(); 
    else res.send(401); 
}; 

app.use(function (req, res, next) { 
    if (req.user) { 
     res.cookie('user', JSON.stringify(req.user)); 
    } 
    next(); 
}); 



app.get('*', function (req, res) { 
    res.redirect('/#' + req.originalUrl); 
}) 

app.use(function (err, req, res, next) { 
    console.error(err.stack); 
    res.send(500, { message: err.message }); 
}); 
+5

第1步:将您的代码缩减为[最小,完整且可验证的示例](http://stackoverflow.com/help/mcve)。这样做的过程是询问这些问题时的基本准备,*通常*让你发现发现过程中出了什么问题,所以你甚至不需要问你的问题。然后如果你没有发现问题,你可以有更好,更小,更准确的代码来提问。 –

+1

@ Mike'Pomax'Kamermans我责备这个链接到的博客帖子,因为它基本上构成了一个文件中的整个列表。但是基于OP的[上一个问题](http://stackoverflow.com/questions/33472211/how-to-retreive-data-from-thetvdb-com)以及原始文章中缺乏细节和解释根本没有数据,或者至少它不在该代码尝试连接的同一个集合或数据库中。 –

+0

@ Mike'Pomax'Kamermans对不起,我有点绝望得到答案。我一直在寻找答案,两天没有继续前进,我仍然看不到错误是什么,而不是他们的在线数据库,我检查了这一点。 –

回答

0

变化var query = Show.find();在/ API /显示了

var query = Show.find(function(err, showdata){ 
    // all the checking and the res.send(shows) goes here 
}) 

等着瞧为数据和做所有的操作(异步)

+0

它仍然没有工作。甚至没有一个错误。 –

+0

我认为问题出现在Blakes Seven所说的代码中,即使你仍然无法找到连接它的方法 –

0

好吧伙计们,我终于找到了问题的答案。脚本没有错(server.js)。这是因为我认为它不能保存数据库中的数据('localhost:27017/test')。这就是为什么我可能从TVDB API获得空响应。有一次,我改变了我的数据库和字符串连接(

'mongodb://nixsiow:[email protected]:27479/nixshowtrackrapp' ,它的工作就像一个魅力。

所以,也许我的回答可能无法正确解释这一点,或者你可以看看在栈的更多细节。溢出感谢您的帮助球员,我希望这将有助于谁尝试做这个教程,并陷在这一步

所以最终的答案:

mongoose.connect('mongodb://nixsiow:[email protected]:27479/nixshowtrackrapp'); 

var agenda = require('agenda')({ db: { address: 'mongodb://nixsiow:[email protected]:27479/nixshowtrackrapp' } }); 

另外Nixsow's website可能会有帮助,这是我在本教程中找到的最新更新。

相关问题