我一直在嘗試與Flickr的API,我期待現在,我完成了將應用程序部署到Heroku的。爲了做到這一點,因爲我使用MongoDB,我試圖讓它與mLab一起運行。我可以登錄到shell中,我可以在將URL作爲字符串使用到數據庫時運行整個事件,但突然間當我將該URL分配給process.env.MONGOLAB_URI
和SET MONGOLAB_URI="mongodb://dbuser:[email protected]:41506/flick r_image_search"
(我使用的是Windows 10)本地命令行並嘗試使用它,它停止工作。 我收到的錯誤消息是「錯誤:無效的模式,預期的mongodb」。即使當我用console.log(url)
它返回"mongodb://dbuser:[email protected]:41506/flickr_image_search"
(我保證我在命令行中使用的用戶名和密碼都是絕對正確的考慮我簡直複製粘貼+我用工作進入命令行的網址),我期望的那樣。我使用的IDE是Visual Studio Code,我沒有使用heroku mLab插件來運行這個,但是我的數據庫在網站上。我沒有想法,可以使用一些幫助。這裏的每個代碼相關的文件,我使用的應用程序:URL工作,直到我通過命令行設置它爲process.env.MONGOLAB_URI
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>
設置環境變量時,你的意思是:'heroku config:set MONGOLAB_URI = mongodb:// dbuser:[email protected]:41506/flickr_image_search',或者命令與Windows不同? https://devcenter.heroku.com/articles/config-vars – pneumee
應該已經指定。當我在本地進行測試時,那是我做了'SET MONGOLAB_URI =「mongodb:// dbuser:[email protected]:41506/flickr_image_search」'。之前我甚至嘗試過這樣做,但我嘗試使用字符串URL進行操作。 SET命令失敗後,我繼續執行命令'heroku config:set MONGOLAB_URI = mongodb:// dbuser:[email protected]:4 1506/flickr_image_se arch',然後部署到Heroku看看它是否會在那裏工作。這些都沒有給我任何成功。 –
設置好'MONGOLAB_URI'環境變量後,能否通過'heroku config:get MONGOLAB_URI'成功獲取?如果是這樣,在heroku上運行時將其記錄到控制檯將記錄正確的uri?如果它正在記錄您期望的內容,您是否在連接時獲得相同的「錯誤:無效的模式,預期的mongodb」錯誤? – pneumee