Dou*_*Cal 1 command-line flickr heroku mongodb mlab
我一直在试验 flickr 的 API,现在我已经完成了,希望将应用程序部署到 Heroku。为了做到这一点,由于我使用的是 MongoDB,我试图让它与 mLab 一起运行。我可以很好地登录到 shell,当我将数据库的 URL 作为字符串使用时,我可以让整个事情运行,但是当我在本地命令中将该 URL 分配给process.env.MONGOLAB_URIwith SET MONGOLAB_URI="mongodb://dbuser:dbpassword@ds041506.mlab.com:41506/flick
r_image_search"(我使用的是 Windows 10)时,我可以让整个事情运行线并尝试使用它,它停止工作。 我收到的错误消息是“错误:无效架构,需要 mongodb”。 即使当我使用console.log(url)它返回"mongodb://dbuser:dbpassword@ds041506.mlab.com:41506/flickr_image_search"(我保证我在命令行中使用的用户名和密码都是绝对正确的,因为我确实复制并粘贴了我在命令行中使用的 URL)正如我所期望的那样。我使用的 IDE 是 Visual Studio Code,我没有使用 heroku mLab 插件来运行它,但我在网站上使用了我的数据库。我没有想法,可以使用一些帮助。这是我用于应用程序的每个相关代码文件:
应用程序.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');
});
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
索引.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>
Run Code Online (Sandbox Code Playgroud)
Heroku 使用MONGODB_URI,但您拥有MONGOLAB_URI.
这可以解释为什么字符串有效但环境变量无效。
尝试在你的 shell 中输入: heroku config
找到 heroku 配置变量。我冒昧地猜测它是MONGODB_URI而不是MONGOLAB_URI。
如果是这种情况,请重置您的环境和 heroku 配置变量以使用MONGODB_URI.
你在评论中说:“我不知道如何在 Heroku 上检查它,特别是因为应用程序不想在那里运行。Heroku 在部署应用程序时一直给我带来麻烦。”
要检查您的配置变量,您可以输入heroku config您的 shell,或者您可以导航到您的应用程序仪表板。单击设置。单击显示配置变量。
当您在仪表板中时,您可以通过单击“资源”选项卡来配置 Heroku 提供的 mLab 插件。然后在附加组件的搜索框中,输入 mLab MongoDB。
点击它。这将带您进入 mLab 的 GUI,您可以在其中查看和管理您的收藏。
如果您想知道服务器设置是什么样的,请参阅下面的代码。这将在适当的情况下连接到您的本地和 mLab 数据库。
if(process.env.MONGODB_URI) {
mongoose.connect(process.env.MONGODB_URI);
}else {
mongoose.connect(db, function(err){ //db = 'mongodb://localhost/yourdb'
if(err){
console.log(err);
}else {
console.log('mongoose connection is successful on: ' + db);
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13445 次 |
| 最近记录: |