Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t向我的数据库mongodb发送新的注册表_Javascript_Node.js_Database_Mongodb_Mongoose - Fatal编程技术网

Javascript Can';t向我的数据库mongodb发送新的注册表

Javascript Can';t向我的数据库mongodb发送新的注册表,javascript,node.js,database,mongodb,mongoose,Javascript,Node.js,Database,Mongodb,Mongoose,我有一个问题,当我尝试在我的数据库中插入一个新的寄存器时,输入是{“url”:“example.com”},我使用的是express framework、mongodb数据库和库mongoose(我已经创建了一个新id,获得了一个id为的url,删除了一个id…,我不能这样做) 在这里,我访问我的数据库并尝试更改它 const mongoose = require('mongoose'); const Chaordic = mongoose.model('Chaordic'); // Add

我有一个问题,当我尝试在我的数据库中插入一个新的寄存器时,输入是{“url”:“example.com”},我使用的是express framework、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(因为我将其与错误消息放在一起),有人可以帮助我吗?

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

var chaordic = new Chaordic();
Mongoose生成一个包含BSON对象id的_id属性

默认情况下,每个模式都有一个getter函数附加到名为
id
的属性。此getter函数返回存储在_id中的BSON ObjectId的字符串表示形式

架构没有为命名的
id
分配setter,因此当您尝试分配如下值时:

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
输出:

#!/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
底线 您有两种选择:

  • 设置模式选项id:false以禁用默认getter

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

    const schema = new Schema({
    myID: {
      type:String,
      unique: true
    
    },
    url: {
      type: String
    },
    hits: {
      type: Number
    },
    shortUrl: {
      type: String
    }
    });
    
  • 第二种选择是我推荐的,能够获得BSON对象ID的字符串版本,而不必自己用字符串转换它,这很好