我是node.js的新手。我正在尝试使用node.js在mongodb中的集合中存储三个不同的对象。
index.js
var mongoose = require('mongoose');
var bodyparser = require('body-parser');
var app = express();
var control = require('./controllers/controller');
var port = 3200;
mongoose.connect(
'mongodb://localhost:27017/create-company',
{useNewUrlParser: true},
err => {
if(err) throw err;
console.log('connection successfully');
}
)
app.use(bodyparser.json());
app.use(bodyparser.urlencoded({extended: true}));
app.use('/api', control);
app.listen(port, function(){
console.log('start your server on: ', port);
});
model.js
var mongoose = require('mongoose');
var CompanySchema = new mongoose.Schema({
companyname: String,
founder: String,
contact: String,
location: String
});
var company = mongoose.model("company", CompanySchema);
var BranchSchema = new mongoose.Schema({
branchname: String,
branchmanger: String,
contact: String,
location: String
});
var branch = mongoose.model('branch', BranchSchema);
var UserSchema = new mongoose.Schema({[enter image description here][1]
username: String,
userrole: String,
age: Number
});
var user = mongoose.model('user', UserSchema);
module.exports = {
company: company,
branch: branch,
user: user
}
controller.js
var express = require('express');
var router = express.Router();
var company = require('../models/model');
router.post('/create_company', function (req, res) {
var new_company = new company.company(req.body);
var new_branch = new company.branch(req.body);
var new_user = new company.user(req.body);
new_company.save(function (err, data) {
if (err)
res.send(data);
console.log(data);
});
new_branch.save(function (err, data) {
if (err)
res.send(data);
console.log(data);
});
new_user.save(function (err, data) {
if (err)
res.send(data);
console.log(data);
});
});
我是这样将数据传递给邮递员的:
[{ “ companyname”:“堆栈”, “创始人”:“ alex”, “联系人”:“ 1234567890”, “位置”:“中” }, { “ branchname”:“ am”, “ branchmanager”:“ abc”, “联系人”:“ 8754216523”, “ location”:“客栈” }, { “用户名”:“ xyz”, “ userrole”:“ admin”, “年龄”:“ 23” }]
答案 0 :(得分:0)
这里有三个问题:
您正试图通过将整个正文传递给构造函数来创建一个新文档。您需要将正确的数组元素传递给其各自的构造函数。
var new_company = new company.company(req.body[0]);
var new_branch = new company.branch(req.body[1]);
var new_user = new company.user(req.body[2]);
您尝试多次发送回复。您需要协调回调,以便在所有回调完成后发送响应。我建议您使用promise来完成此任务,所幸Mongoose支持promise。
Promise.all([
new_company.save(),
new_branch.save(),
new_user.save()
]).then(function (data) {
res.send(data);
console.log(data);
});
您没有正确处理该错误。您的if (err)
语句将导致在发生错误时调用res.send(data)
,这当然是不希望的。使用上面定义的基于promise的方法进行错误处理非常简单。
Promise.all([
new_company.save(),
new_branch.save(),
new_user.save()
]).then(function (data) {
res.send(data);
console.log(data);
}).catch(function (err) {
res.status(400).send('Uh oh! Something bad happened.');
console.error(err);
});
如果使用ES6语法,则可以编写一条同步外观的路由,如果您来自其他语言,则可能会更熟悉:
router.post('/create_company', async (req, res) => {
try {
const [company, branch, user] = req.body;
const data = await Promise.all([
new company.company(company).save(),
new company.branch(branch).save(),
new company.user(user).save()
]);
res.send(data);
} catch (err) {
res.status(400).send('Uh oh! Something bad happened.');
console.error(err);
}
});