我有一个问题,当我尝试在我的数据库中插入一个新的寄存器时,输入是{" 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(因为我把它与错误消息一起提交)有人可以帮助我吗?
答案 0 :(得分:1)
使用以下内容创建新文档时
var chaordic = new Chaordic();
Mongoose生成一个包含BSON ObjectId的_id属性。
默认情况下,每个架构都有一个附加到名为id
的{{3}}属性的getter函数。此getter函数返回存储在_id。
架构没有为名为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
您有两个选择:
设置架构选项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 ObjectId的字符串版本而不必自己用String转换它是很好的。