目前我正在使用Mongoose ODM Express为我的移动应用程序构建RESTful API。在我的Mongoose Schema中,我有一个标题:索引字段。我按照Mongoose Unique Index Validation Document在MongoDB中创建唯一文档,下面是我的代码
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var CategorySchema = new Schema({
title: { type: String, required: true, index: true, unique: true },
details: { type: String, required: false },
thumbnail: { type: String, required: false },
created: { type: Date, default: Date.now },
modified: { type: Date, default: Date.now }
});
module.exports = mongoose.model('Category', CategorySchema);
var express = require('express');
var routes = express.Router();
var Category = require('./models/category.model');
routes.route('/categories')
.post(function(req, res) {
Category.on('index', function(error) {
if(error) {
res.send(error);
}
Category.create({ title: req.body.title, details: req.body.details,
thumbnail: req.body.thumbnail }, function(error) {
if(error) {
res.send(error);
}
res.json({ message: 'Category was save successfully..!' });
});
});
});
现在我的问题是,当我向我的API http://localhost:3000/api/v1.0/categories.
发送 POST 请求时,它不会向我的客户端应用程序发送任何响应。这不会在服务器控制台中显示任何警告或错误。
答案 0 :(得分:0)
我没有注意到
的重点Category.on('index', function(error) {
if(error) {
res.send(error);
}
}
那里。你想在控制器函数中监听索引事件吗?可能不是。
你可以移动
Category.create({ title: req.body.title, details: req.body.details,
thumbnail: req.body.thumbnail }, function(error) {
if(error) {
res.send(error);
}
res.json({ message: 'Category was save successfully..!' });
});
出来了。您还应确保在发送回复后返回,否则您最终可能会发送多个回复。在if(error)
内,您执行res.send(error)
,但稍后会继续res.json()
。
因此,如果您的其余代码是正确的,那么这可能会有效:
var express = require('express');
var routes = express.Router();
var Category = require('./models/category.model');
routes.route('/categories').post(function(req, res) {
Category.create({
title: req.body.title,
details: req.body.details,
thumbnail: req.body.thumbnail
}, function(error) {
if(error) {
return res.status(500).json(error);
}
return res.status(201).json({ message: 'Category was save successfully..!' });
});
});
如果您违反 title 的唯一约束,您将收到一条错误消息。执行创建时会发生这种情况。您必须在唯一约束开始工作之前重新启动应用程序。