[英]Can't send a new register to my database mongodb
我有一個問題,當我嘗試在日期數據庫中插入新的寄存器時,其中輸入為{“ url”:“ example.com”},我正在使用express框架,mongodb datebase和庫mongoose(我已經創建了一個新的ID,獲取具有ID的網址,刪除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();
貓鼬會生成一個_id屬性,其中包含BSON ObjectId。
默認情況下,每個模式都有一個附加到名為id
的虛擬屬性的getter函數。 此getter函數返回存儲在_id中的BSON ObjectId的字符串表示形式。
該架構沒有將分配器分配給虛擬命名id
,因此當您嘗試分配一個值時,例如:
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
您有2個選擇:
設置模式選項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進行轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.