我正在按照本教程在我的openshift帐户中托管Rest API:
Day 27: Restify–Build Correct REST Web Services in Node.js
根据我的要求,我做了一些更改,下面是代码:
server.js
var restify = require('restify');
var mongojs = require('mongojs');
var ip_addr = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';
var port = process.env.OPENSHIFT_NODEJS_PORT || 8080;
var server = restify.createServer({name: 'bemeta'});
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.use(restify.CORS());
server.listen(port, ip_addr, function(){
console.log(server.name + ' listening at url ' + server.url);
});
var connectionString = '127.0.0.1:27017/bemeta';
if(process.env.OPENSHIFT_MONGODB_DB_PASSWORD){
connectionString = process.env.OPENSHIFT_MONGODB_DB_USERNAME + ':' +
process.env.OPENSHIFT_MONGODB_DB_PASSWORD + '@' +
process.env.OPENSHIFT_MONGODB_DB_HOST + ':' +
process.env.OPENSHIFT_MONGODB_DB_PORT + '/' +
process.env.OPENSHIFT_APP_NAME;
}
var db = mongojs(connectionString, ['bemeta']);
var beRecords = db.collection("be_records");
var PATH = '/be_records';
// get all records
server.get({path: PATH, version:'0.0.1'}, findAllRecords);
// create new record
server.post({path: PATH, version:'0.0.1'}, createRecord);
// defining call backs
function findAllRecords(req, res, next){
res.setHeader('Access-Control-Allow-Origin', '*');
beRecords.find(function(err, docs){
console.log('Response docs ' + docs);
console.log('Error '+ err);
if(docs){
res.send(200, docs);
return next();
}
return next(err);
});
}
function createRecord(req, res, next){
res.setHeader('Access-Control-Allow-Origin', '*');
var beRecord = {};
beRecord.be_id = req.params.be_id;
beRecord.item_title = req.params.item_title;
beRecord.item_description = req.params.item_description;
beRecord.item_link = req.params.item_link;
beRecords.save(beRecord, function(err, docs){
console.log('Response docs ' + docs);
console.log('Error '+ err);
if(docs){
res.send(201, beRecord);
return next();
}
else {
next(err);
}
});
}
当我在本地运行它并通过键入以下url:
通过邮递员发出获取请求http://127.0.0.1:8080/be_records
我的回复为:[]
,这是正确的,因为我没有在相应的集合中插入任何文档。
但是当我在我的openshift帐户中运行它并通过输入以下网址发送邮件获取请求时:
http://bemeta-{domain-name}.rhcloud.com/be_records
我的反应是:
{
"code": "InternalError",
"message": "auth fails"
}
在我的rhc控制台中,我看到以下消息:
==> app-root/logs/mongodb.log <==
Wed Feb 24 01:32:23.543 [conn3] authenticate db: bemeta { authenticate: 1, user: "admin", nonce: "some nonce", key: "some key" }
Wed Feb 24 01:32:23.544 [conn3] auth: couldn't find user admin@bemeta, bemeta.system.users
我不确定为什么它试图找到用户 - admin @ bemeta,可能是我在这里缺少一些东西,我没有任何这样的用户,但我确实有一个管理员用户,用于连接到mongodb。
以下是我的数据库的快照(如RockMongo所示):
有什么想法吗?
答案 0 :(得分:1)
auth错误是由于未对if (sDirectionHashMap.get(idsList.get(position)).equals("incoming")) {
holder.messageLayout.setGravity(Gravity.LEFT);
} else {
holder.messageLayout.setGravity(Gravity.RIGHT);
}
用户进行身份验证以访问admin
数据库引起的(有关详细信息,请参阅上面的问题评论)。
用户可以使用RockMongo界面进行身份验证,如下所示:
选择一个数据库 - &gt;更多 - &gt;身份验证 - &gt;添加用户。