Документ не найден/отсутствует после вставки в базу данных CouchDB

Я пытаюсь создать простую базу данных с именем «_users» и вставить в нее нового пользователя с помощью Couch-DB.

Я использую Node в оболочке для запуска следующего кода:

UserProfile.js

var nano = require('nano')('http://localhost:5984')        
module.exports = {
    addUser: function(id, name, password){                
        var usersDB = nano.use('_users')
        var options = {
            "_id": "org.couchdb.user:"+id,
            "name": id,
            "roles": [],            
            "type": "user",
            "password": password
        }
        usersDB.insert(options, function(err, body, header) { 
            console.log('insert is being called')
            if (err) {
                console.log(err.message);
                return;
            }            
            console.log(body);
        });

    }
};

замена узла

> var nano = require('nano')('http://localhost:5984')
undefined
> var usersdb = nano.db.destroy('_users')
undefined
> var usersdb = nano.db.create('_users')
undefined
> var profile = require('./UserProfile.js')
undefined
> profile.addUser('cheese', 'flubber', 'goat')
undefined
> insert is being called
> OS process timed out.

После запуска я ожидаю увидеть запись в /_users/cheese, но записи не существует. Я что-то делаю неправильно?


person David J.    schedule 28.12.2017    source источник
comment
1. Ожидаемая запись должна быть /_users/org.couchdb.user:cheese 2. Каков ответ обратного вызова usersDB.insert?   -  person Alexis Côté    schedule 28.12.2017
comment
@AlexisCôté Когда я иду к /_users/org.couchdb.user:cheese, я вижу {"error":"not_found","reason":"missing"}. От обратного вызова нет ответа; как вы можете видеть в моей оболочке выше, он просто возвращает значение undefined.   -  person David J.    schedule 28.12.2017
comment
Функции nano.db.destroy и nano.db.create используют обратные вызовы — были ли разрешены вызовы API перед переходом к следующему вызову?   -  person tephyr    schedule 02.01.2018


Ответы (1)


при создании пользователя _id должен быть таким: org.couchdb.user:name.

В вашем случае вы создаете пользовательский сыр с другим именем.

Кроме того, вы можете проверить обратный вызов ошибки. Couch должен вернуть сообщение об ошибке.

Также

Когда вы удаляете и создаете базу данных, вы должны использовать обратный вызов.

Когда вы создаете _users, вы напрямую создаете пользователя, даже если создание базы данных _users не было подтверждено.

person Alexis Côté    schedule 28.12.2017
comment
Я обновил свой вопрос, чтобы показать, что теперь у меня есть org:couchdb.user:name и name с одинаковыми значениями (id). Кроме того, я не могу проверить обратный вызов ошибки, потому что обратный вызов не вызывается. Я просто возвращаю undefined. - person David J.; 28.12.2017