【问题标题】:couchDB unable to create a database with node.jscouchDB 无法使用 node.js 创建数据库
【发布时间】:2021-07-20 03:48:49
【问题描述】:

我是 node.js 的新手(刚接触几天),正在通过 youtube 的教程学习(不知道是否允许发布链接)。

我正在尝试在 couchDB 中创建一个数据库。一切正常,但是一旦我尝试在表单上输入任何详细信息,它就会显示异常“创建数据库地址时出错”(地址是我要创建的数据库的名称)

我非常仔细地按照教程进行操作,并且一直在寻找解决方案,但最终一无所获。

如果你发现了什么,请帮忙。

App.js:

var express = require('express');
var routes = require('./routes');
var http = require('http');
var path = require('path');
var urlencoded = require('url');
var bodyParser = require('body-parser');
var json = require('json');
var logger = require('logger');
var methodOverride = require('method-override');

var nano = require('nano')('http://admin:password@localhost:5984');

var db = nano.use('address');
var app = express();

app.set('port', process.env.PORT || 3000);
app.set('views',path.join(__dirname,'views'));
app.set('view engine', 'jade');

app.use(bodyParser.json());
// app.use(bodyParser.urlencoded());
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(methodOverride());
app.use(express.static(path.join(__dirname, 'public')));

app.get('/',routes.index);

app.post('/createdb', function(req, res) {
    nano.db.create(req.body.dbname, function(err){
        if(err) {
            res.send("Error creating Database " + req.body.dbname);
            return;
        }

        res.send("Database " + req.body.dbname + "created successfully");
    });
});

app.post('/new_contact', function(req, res) {
    var name = req.body.name;
    var phone = req.body.phone;

    db.insert({name : name, phone : phone, crazy : true}, phone, function(err,body, header) {
        if(err) {
            res.send("Error creating contact");
            return;
        }
        res.send("Contact created successfully");
    });
});


app.post('/view_contact', function(req, res) {
    var alldoc = "Following are the contacts";
    db.get(req.body.phone, {revs_info : true}, function(err, body) {
        if(!err) {
            console.log(body);
        }
        if(body) {
            alldoc += "Name: " + body.name + "<br/>Phone Number: " + body.phone;
        }
        else {
            alldoc = "No records found";
        }
        res.send(alldoc);
    });
});


app.post('/delete_contact', function(req, res) {
    db.get(req.body.phone, {revs_info : true}, function(err, body) {
        if(!err) {
            db.destroy(req.body.phone, body._rev, function(err, body) {
                if(err) {
                    res.send("error deleting contact");
                }
            });
            res.send("Contacts deleted successfullly");
        }
    });
});


http.createServer(app).listen(app.get('port'), function() {
    console.log('Express server listening on port: ' + app.get('port'));
});

index.js

exports.index = function(req,res) {
    res.render('index', {title: 'express'});
};

createdb.js

exports.create = function(req, res) {
    nano.db.create(req.body.dbname, function() {
        if(err) {
            res.send("Error creating the Database");
            return;
        }
        res.send("database created successfully");
    });
};

index.js 和 createdb.js 都在 routes 文件夹中

index.jade

extend layout 

block content 
    h1 Add new Contact 
    form(method="POST", action = '/new_contact')
        p name:
        input#title(type = "text", name = "name")
        p Phone No.: 
        input#title(type = "text", name = "phone")

        p: button(type = "submit") Add new Contact 

    h1 Add new Database 
    form(method = "POST", action= "/createdb")
        p Database name: 
        input#title(type = "text", name = "dbname")
        
        p: button(type="submit") Add new Database

    h1 enter Phone number to delete new_contact
    form(method = "POST", action= "/delete_contact")
        p Phone No.: 
        input#title(type = "text", name = "phone")
        
        p: button(type="submit") Delete Contact 

    h1 View Specific contact
    form(method = "POST", action= "/view_contact")
        p Phone No.: 
        input#title(type = "text", name = "phone")
        
        p: button(type="submit") Search Contact

layout.jade

doctype html
html
    head
        title = title 
        //- link(rel='stylesheet', href='/stylesheet/style.css')
    body 
        block content

layout.jadeindex.jade 存在于 views 文件夹中

package.json

{
  "name": "sample",
  "version": "1.0.0",
  "description": "just a sample.",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "errorhandler": "^1.5.1",
    "express": "^4.17.1",
    "express-session": "^1.17.1",
    "jade": "^1.11.0",
    "json": "^10.0.0",
    "logger": "0.0.1",
    "method-override": "^3.0.0",
    "nano": "^9.0.3",
    "pug": "^3.0.2",
    "serve-favicon": "^2.5.0",
    "url": "^0.11.0"
  }
}

【问题讨论】:

  • 把玉改成哈巴狗,还是一样的问题。
  • 请不要发布图片,随着时间的推移,它们最终会成为损坏的链接,更重要的是它会阻止那些有视力障碍的人提供帮助。
  • 我添加了一个链接,有人编辑了它,请指导我另一种方式,这样我就可以在不影响任何人的情况下描述我的问题。

标签: javascript node.js express couchdb couchdb-nano


【解决方案1】:

只是简单浏览一下代码,您似乎没有将任何身份验证详细信息传递给 nano:

var nano = require('nano')('http://localhost:5984');
var db = nano.use('address');

/* ... */

app.post('/createdb', function(req, res) {
    nano.db.create(req.body.dbname, function(err){

这可能在以管理员模式运行的旧版本 CouchDB 中有效,从 CouchDB 3.0 开始不再支持。

在本地安装 CouchDB 时,您需要在开始之前设置管理员用户和密码。

使用 nano 时,您需要提供以下凭据:

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

【讨论】:

  • 同样的问题,没用,var nano = require('nano')('admin:password@localhost:5984'); [密码只是密码,所以它应该可以正常工作吗?] 也用相同的方式编辑了帖子。 @LyteFM
  • 嗯,凭据需要正确,并且 CouchDB 需要运行。您可以通过127.0.0.1:5984/_utils/# 的浏览器登录Fauxton 吗?如果您只是通过 nodejs 运行一个最小的示例,它是否有效,例如:var nano = require('nano'('http://admin:password@localhost:5984'); nano.db.create('test')
  • 是的,行得通。创建测试数据库。但是不知道是什么错误导致了 else 语句的执行。
  • 其实你知道吗,我是个白痴。数据库名称中只允许使用小写字母,我添加了地址(第一个字母是大写)。控制台记录错误并修复它,现在它工作正常。
猜你喜欢
  • 2018-06-11
  • 2021-01-07
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多