Ich habe mit der API von flickr experimentiert und bin auf der Suche um die Anwendung zu Heroku jetzt einzusetzen, dass ich fertig bin. Um dies zu tun, versuche ich, seit ich MongoDB verwende, dass es mit mLab läuft. Ich kann in die Schale einzuloggen ganz gut, ich kann das ganze Ding zu laufen, wenn ich die URL in die Datenbank als Zeichenfolge verwenden, aber plötzlich, als ich zuweisen diese URL process.env.MONGOLAB_URI
mit SET MONGOLAB_URI="mongodb://dbuser:[email protected]:41506/flick r_image_search"
(Ich verwende Windows 10) in der lokale Befehlszeile und versuchen Sie es zu verwenden, es funktioniert nicht mehr. Die Fehlermeldung, die ich bekomme, ist "Fehler: ungültiges Schema, erwarteter Mongodb". Selbst wenn ich console.log(url)
verwendete, gab es "mongodb://dbuser:[email protected]:41506/flickr_image_search"
zurück (ich garantiere, dass der Benutzername und das Passwort, die ich in der Befehlszeile verwendete, absolut korrekt sind, da ich die URL, die in der Befehlszeile verwendet wurde, kopiert und eingefügt habe). Die IDE, die ich verwende, ist Visual Studio Code und ich habe nicht das Heroku mLab Add-on verwendet, um dies zu tun, aber meine Datenbank auf der Website selbst. Ich habe keine Ideen mehr und kann Hilfe gebrauchen. Hier ist jede entsprechende Datei von Code, den ich für die Anwendung mit:URL funktioniert, bis ich es process.env.MONGOLAB_URI über die Kommandozeile gesetzt
app.js
var express = require('express');
var app = express();
var flickr = require('./flickr.js');
var mongo = require('mongodb').MongoClient;
var path = require('path');
var url = process.env.MONGOLAB_URI;
var today = new Date();
var day = today.getDate();
var month = today.getMonth()+1;
var year = today.getFullYear();
var mins = today.getMinutes();
var hr = today.getHours();
today = month + '/' + day + '/' + year + ' ' + hr + ':' + mins;
var obj;
var search;
app.get('/', function(req, res){
res.sendFile(path.join(__dirname + '/index.html'));
});
app.get('/latest', function(req, res){
mongo.connect(url, function(err, db){
if(err) throw err;
var theCollection = db.collection('flickr_image_search');
theCollection.find({}).toArray(function(err, docs){
if(err) throw err;
search = docs;
return docs;
});
db.close();
});
res.send(search);
});
app.get(['/search/:text/:offSet2', '/search/:text'], function(req, res){
var lookInIt = req.params.text;
var listLength = req.params.offSet2;
var searched = flickr.search(lookInIt, listLength || 10);
obj = {
query: lookInIt,
offSet: listLength,
date: today
};
mongo.connect(url, function(err, db){
if(err) throw err;
var imageSearch = db.collection('flickr_image_search');
imageSearch.insert(obj);
db.close();
});
res.send(searched);
});
var port = 3000 || process.env.PORT;
app.listen(port, process.env.IP, function(){
console.log('LISTENING');
});
flickr.js
var private = require('./private');
var Flickr = require("flickrapi"),
flickrOptions = {
api_key: private.key,
secret: private.secret
};
var obj;
function search (query, offSet) {
Flickr.tokenOnly(flickrOptions, function (err, flickr) {
if (err) throw err;
flickr.photos.search({
text: query,
page: 1,
per_page: offSet,
sort: "relevance"
}, function (err, result){
if(err) throw err;
result = result.photos.photo;
for(var key in result){
var picUrl = 'https://farm' + result[key]["farm"] + '.staticflickr.com/' + result[key]["server"] + '/' + result[key].id + '_' + result[key].secret + '.jpg'
result[key].picUrl = picUrl;
var userUrl = 'https://www.flickr.com/photos/' + result[key].owner + '/' + result[key].id;
result[key].userUrl = userUrl;
delete result[key]["ispublic"];
delete result[key]["isfriend"];
delete result[key]['isfamily'];
delete result[key]['id'];
delete result[key]['owner'];
delete result[key]['server'];
delete result[key]['farm'];
delete result[key]['secret'];
}
obj = result;
});
});
return obj;
}
module.exports.search = search;
index.html
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
<title>flickr Image Search</title>
<div class='container'>
<h1 class='text-center'>Flickr Image Search</h1>
<h3 class='well'>To get a series of URLs for images, type 'search/whatever-you-want-to-search/the-amount-of-photos-you-want-returned' in the address bar after 'someWebsite.com/'.
If you want to see the most latest searches that were searched, instead of 'search/whatever-you-want-to-search/the-amount-of-photos-you-want-returned' type 'latest'.
When you find the URL that you want, just copy+paste!</h3>
<p class=lead>This application is purely functional, so chances are the queries won't return clean.</p>
<p>This is an application that searches through the photos of Flickr, using its API.</p>
</div>
Bei der Einstellung der Umgebungsvariablen meinten Sie Folgendes: 'heroku config: set MONGOLAB_URI = mongodb: // dbuser: [email protected]: 41506/flickr_image_search', oder ist der Befehl unter Windows anders? https://devcenter.heroku.com/articles/config-vars – pneumee
Sollte angegeben haben. Wenn ich lokal getestet habe, habe ich 'SET MONGOLAB_URI =" mongodb: // dbuser: [email protected]: 41506/flickr_image_search "'. Bevor ich das überhaupt versuchte, versuchte ich es mit der String-URL, die funktionierte. Nachdem der SET-Befehl fehlgeschlagen ist, ging ich weiter und habe den Befehl 'heroku config: gesetzt: MONGOLAB_URI = mongodb: // dbuser: [email protected]: 4 1506/flickr_image_se arch' und dann auf Heroku verteilt um zu sehen, ob es dort funktionieren würde. Beides hat mir keinen Erfolg gebracht. –
Nachdem Sie die Umgebungsvariable 'MONGOLAB_URI' eingestellt haben, können Sie sie erfolgreich über' heroku config: get MONGOLAB_URI' abrufen? Wenn dies der Fall ist, loggt die Anmeldung an der Konsole während der Ausführung auf Heroku die richtige URL ein? Und wenn es protokolliert, was Sie erwarten, erhalten Sie den gleichen Fehler "Fehler: ungültiges Schema, erwartete Mongodb" beim Verbinden? – pneumee