2017-08-13 54 views
0

我试图创建一个的NodeJS API端点MongoDB中插入数据。我有这是为什么我与这两种模式类似下面的相互关系that`s 2种獴模式:如何在相关猫鼬架构插入数据?

帖子模式:

const mongoose = require('mongoose'); 
const Schema = mongoose.Schema; 

const PostSchema = mongoose.Schema({ 
    title: { type: String, trim: true, required: true}, 
    description: { type:String, required: true }, 
    created_at: { type: Date, default: Date.now }, 
    author: {type: Schema.ObjectId, ref: 'Author', required: true}, 
}); 

const Post = module.exports = mongoose.model('Post', PostSchema); 

作者架构:

const mongoose = require('mongoose'); 

const AuthorSchema = mongoose.Schema({ 
    fullname: { type: String, trim: true, required: true}, 
    address: { type: String, required: true }, 
    phone: { type: Number, required: true }, 
    email: { type: String, required: true }, 
    created_at: { type: Date, default: Date.now } 
}); 

const Author = module.exports = mongoose.model('Author', AuthorSchema); 

现在我可以很容易地插入数据作者模式

Authors.js:

router.post('/', (req, res, next) => { 
    let newAuthor = new Authors({ 
    fullname: req.body.fullname, 
    address: req.body.address, 
    phone: req.body.phone, 
    email: req.body.email 
    }); 

    newAuthor.save((err, user) => { 
    if(err) { 
     res.json({ 
     success: false, 
     msg: "Failed to add author" 
     }); 
    } else { 
     res.json({ 
     success: true, 
     msg: "Author added successfully" 
     }); 
    } 
    }); 
}); 

但对于帖子我被困在这里

posts.js:

router.post('/', (req, res) => { 
    var newPost = new Posts({ 
     title: req.body.title, 
     description: req.body.description, 
     author: 
    }) 
}) 

主要问题是如何让笔者??

+0

所以,你需要把身体参数(即'authorId')POST请求中,然后通过'req.body.authorId' –

回答

0

您可以在作者栏作者ID。

// you can set authorId in req.body and use that 
router.post('/', (req, res) => { 
    var newPost = new Posts({ 
     title: req.body.title, 
     description: req.body.description, 
     author: req.body.authorId 
    }) 
}); 

也可以在路由路径设置作者ID,并使用req.params.authorId

// for that route from ui call should be like 
// var userId = 4654654545454 
// $http.post('/'+userId).... 

router.post('/:authorId', (req, res) => { 
    var newPost = new Posts({ 
     title: req.body.title, 
     description: req.body.description, 
     author: req.params.authorId 
    }) 
}); 
+0

我得到验证错误 – user3869304

+0

你得到什么错误访问它? @ user3869304 –

0

在那里你允许用户创建的帖子的页面,你需要通过作者的ID与的其他地方一样发布详情。然后,你可以简单地指的是由任何你选择将其作为发送(即AUTHORID)作者的ID。

如果您使用的是串行器,从您的形式搜集了所有的值,并很好地将它们打包,然后插入存储作者的ID的隐藏的输入字段,这样你就可以捕捉为好。例如:

<input type="hidden" name="authorId" value={user._id} /> 

否则,如果要手动包装表单字段值,则只需添加了作者的ID作为响应对象的其它属性。不知道你在做什么,发送请求,但说你用爱可信库发送AJAX张贴到您的终点,你可以做到这一点很容易笔者添加到响应:

const title = document.getElementByNames("title")[0].value 
const description = document.getElementByNames("description")[0].value 
const author = document.getElementByNames("authorId")[0].value 
axios.post("/posts", {title: title, description: description, author: authorId}).then(res => console.log(res))