2015-11-03 75 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可能會有幫助,這是我在本教程中找到的最新更新。