Проблемы с развертыванием в Heroku с использованием Mongoskin и MongoHQ с Nodejs

В настоящее время я создаю приложение node/express.js, которое использует mongoskin. Недавно я развернул свое приложение на Heroku, и у меня была куча головной боли с включением mongohq для работы с моим приложением.

Это файл app.js, который я запускаю с узлом app.js.

var express = require("express");
var app = express();
decks = require('./routes/decks');
app.get('/decks', decks.findAll);

Мой пакет.json:

{
    "name": "blah blah",
    "description": "Why are there so my blah blah",
    "version": "0.0.1",
    "private": true,
    "dependencies": {
        "express": "3.x",
        "mongodb": "1.1.8",
        "socket.io": "0.9.10"
    },
    "engines": {
        "node": "0.8.4",
        "npm": "1.1.49"
    }
}

Прочитав гайд по Heroku, я пытаюсь реструктурировать decks.js и использовать mongoskin таким образом.

var mongo = require('mongoskin'); 
var mongoUri = process.env.MONGOHQ_URL;
var db = mongo.db(mongoUri);

exports.findById = function(req, res) {
     var id = req.params.id;
     console.log('Retrieving deck: ' + id);
     db.collection('decks', function(err, collection) {
         collection.findOne({'_id':new BSON.ObjectID(id)}, function(err, item) {
             res.send(item);
         });
     });
 };

Однако я получаю сообщение об ошибке:

 Please ensure that you set the default write concern for the database by setting    =
=   one of the options                                                                 =
=                                                                                      =
=     w: (value of > -1 or the string 'majority'), where < 1 means                     =
=        no write acknowlegement                                                       =
=     journal: true/false, wait for flush to journal before acknowlegement             =
=     fsync: true/false, wait for flush to file system before acknowlegement           =
=                                                                                      =
=  For backward compatibility safe is still supported and                              =
=   allows values of [true | false | {j:true} | {w:n, wtimeout:n} | {fsync:true}]      =
=   the default value is false which means the driver receives does not                =
=   return the information of the success/error of the insert/update/remove            =
=                                                                                      =
=   ex: new Db(new Server('localhost', 27017), {safe:false})                           =
=                                                                                      =
=   http://www.mongodb.org/display/DOCS/getLastError+Command                           =
=                                                                                      =
=  The default of no acknowlegement will change in the very near future                =
=                                                                                      =
=  This message will disappear when the default safe is set on the driver Db           =
========================================================================================

Я прочитал тонны руководств, но просто не могу заставить свою базу данных работать!! Пожалуйста, любая помощь вам будет оценена.


person dazer    schedule 12.09.2013    source источник


Ответы (2)


Ваш объект Db использует устаревший параметр: «безопасный».

Если вы установите опцию «w» с желаемой записью, эта ошибка должна исчезнуть.

Вот ссылка на документы для создания экземпляра этого объекта Db.

http://mongodb.github.io/node-mongodb-native/api-generated/db.html

...

О, и вы можете попробовать обновить свою переменную uri до process.env.MONGOHQ_URL: P

person supershabam    schedule 12.09.2013

то что супершабам сказал правильно

изменить эту строку:

var db = mongo.db(mongoUri);

к этому:

var db = mongo.db(mongoUri, {w:1});

это даст вам подтверждение записи при выполнении операций в базе данных и устранит ошибку.

для получения дополнительной информации о проблемах с записью перейдите по этой ссылке

person niket    schedule 02.11.2013