无法将新注册表发送到我的数据库mongodb

时间:2018-04-15 13:55:21

标签: javascript node.js database mongodb mongoose

我有一个问题,当我尝试在我的数据库中插入一个新的寄存器时,输入是{" url":" example.com"},i' m使用快速框架,mongodb数据库和库mongoose(我已经创建了一个新的id,获取一个带id的url,删除一个id ...,只是这个我不能)

这里我访问了我的数据库并尝试更改它

const mongoose = require('mongoose');
const Chaordic = mongoose.model('Chaordic');

// Add a new URL 
exports.addUrl = (req,res,next) => {

var chaordic = new Chaordic();
chaordic.id = req.params.id;
chaordic.url = req.body.url;
chaordic.hits = 0;
chaordic.shortUrl = shortenUrl(chaordic.url)
chaordic.save().then(x =>{
    res.status(201).send({
        id: chaordic.id
    });
}).catch(e =>{
    res.status(204).send(e);
})
}

这里我发送服务器请求

const express = require('express');
const router  = express.Router();
const controller = require('../controllers/controller');

router.post('/users/:id/urls', controller.addUrl);

module.exports = router;

这是我的模特

const mongoose = require('mongoose')
const Schema = mongoose.Schema;
const schema = new Schema({
id: {
    type:String,
    unique: true

},
url: {
    type: String
},
hits: {
    type: Number
},
shortUrl: {
    type: String
}
});

module.exports = mongoose.model('Chaordic', schema); 

当我发送服务器请求时,服务器返回错误204(因为我把它与错误消息一起提交)有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

使用以下内容创建新文档时

var chaordic = new Chaordic();

Mongoose生成一个包含BSON ObjectId的_id属性。

默认情况下,每个架构都有一个附加到名为id的{​​{3}}属性的getter函数。此getter函数返回存储在_id。

中的BSON ObjectId的字符串表示形式

架构没有为名为id的{​​{3}}分配设置器,因此当您尝试分配如下值时,

chaordic.id = req.params.id;

它无法正常工作。

考虑这个例子:

#!/usr/bin/env node
'use strict';

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const schema = new Schema({});

const Test = mongoose.model('test', schema);

const test = new Test({});

test.id = 'this is not going to work.';

console.log(test.id);

<强>输出:

5ad37f0fb000cf81a881600f

底线

您有两个选择:

  1. 设置架构选项id:false以禁用默认的getter

    schema.set('id', false)
    
  2. 将您的ID路径的名称更改为其他名称。

    const schema = new Schema({
    myID: {
      type:String,
      unique: true
    
    },
    url: {
      type: String
    },
    hits: {
      type: Number
    },
    shortUrl: {
      type: String
    }
    });
    
  3. 第二个选择是我建议的那个,能够获得BSON ObjectId的字符串版本而不必自己用String转换它是很好的。