Как я могу получить доступ к своему couchdb с моего сервера узлов, используя REST / JSON / GET / POST? - PullRequest
3 голосов
/ 23 августа 2011

Я пытаюсь получить доступ к своему couchdb с сервера node.js.

Я следовал руководству по nodejs и настроил этот простой сервер nodejs:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(80, "127.0.0.1");
console.log('Server running at http://127.0.0.1:80/');

Я хотел бы отправлять запросы RESTful http и POST на сервер nodejs. Затем сервер nodejs должен иметь возможность отправлять запрос GET / POST на Couchdb, который отвечает объектами JSON.

Как я могу это сделать?

Ответы [ 4 ]

3 голосов
/ 05 сентября 2011

Прежде всего я являюсь автором nano и буду использовать его в этом ответе.

Вот несколько простых инструкций для начала работы с node.js и CouchDb.

mkdir test && cd test
npm install nano
npm install express

Если у вас установлен couchdb, отлично. Если вы этого не сделаете, вам нужно будет либо установить его, настроить экземпляр онлайн на iriscouch.com

Теперь создайте новый файл с именем index.js. Внутри поместите следующий код:

var express = require('express')
   , nano    = require('nano')('http://localhost:5984')
   , app     = module.exports = express.createServer()
   , db_name = "my_couch"
   , db      = nano.use(db_name);

app.get("/", function(request,response) {
  nano.db.create(db_name, function (error, body, headers) {
    if(error) { return response.send(error.message, error['status-code']); }
    db.insert({foo: true}, "foo", function (error2, body2, headers2) {
      if(error2) { return response.send(error2.message, error2['status-code']); }
      response.send("Insert ok!", 200);
    });
  });
});

app.listen(3333);
console.log("server is running. check expressjs.org for more cool tricks");

Если вы настроили username и password для своей CouchDB, вам нужно включить ее в URL. В следующей строке я добавил admin:admin@ к URL для примера

, nano    = require('nano')('http://admin:admin@localhost:5984')

Проблема с этим сценарием в том, что он пытается создать базу данных каждый раз, когда вы делаете запрос. Это не удастся, как только вы создадите его в первый раз. В идеале вы хотите удалить базу данных create из скрипта, чтобы она работала вечно:

var express = require('express')
   , db    = require('nano')('http://localhost:5984/my_couch')
   , app     = module.exports = express.createServer()
   ;

app.get("/", function(request,response) {
    db.get("foo", function (error, body, headers) {
      if(error) { return response.send(error.message, error['status-code']); }
      response.send(body, 200);
    });
  });
});

app.listen(3333);
console.log("server is running. check expressjs.org for more cool tricks");

Теперь вы можете либо создавать вручную, либо даже делать это программно. Если вам интересно, как вы этого добьетесь, вы можете прочитать эту статью, которую я написал некоторое время назад Нано-минималистичный CouchDB для node.js .

Для получения дополнительной информации см. expressjs и nano . Надеюсь, это поможет!

2 голосов
/ 23 августа 2011

Просто делайте HTTP-запросы.Я бы порекомендовал request

Вот пример из моего кода

request({
    "uri": this._base_url + "/" + user._id,
    "json": user,
    "method": "PUT"
}, this._error(cb));

Вот еще один пример из моего кода

// save document
"save": function _save(post, cb) {
    // doc changed so empty it from cache
    delete this._cache[post.id];

    // PUT document in couch
    request({
        "uri": this._base_url + "/" + post._id,
        "json": post,
        "method": "PUT"
    }, this._error(function _savePost(err, res, body) {
        if (body) {
            body.id = post.id;
            body.title = post.title;
        }
        cb(err, res, body);
    }));
}
2 голосов
/ 23 августа 2011

У меня есть модуль ( node-couchdb-api ), который я написал для этой конкретной цели. У него нет ORM или других подобных функций, это просто простая оболочка для HTTP API, которую предлагает CouchDB. Он даже следует соглашениям, установленным Node.JS для асинхронных обратных вызовов, что делает ваш код намного более последовательным. :)

2 голосов
/ 23 августа 2011

Для работы с CouchDB можно использовать модуль node.js, например Cradle .

Вот список доступных модулей Node.JS: https://github.com/joyent/node/wiki/modules

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...