索引上的Mongoose ODM无法在客户端应用程序中获得任何响应

时间:2017-11-06 06:04:27

标签: javascript express mongoose mongoose-schema

目前我正在使用Mongoose ODM Express为我的移动应用程序构建RESTful API。在我的Mongoose Schema中,我有一个标题:索引字段。我按照Mongoose Unique Index Validation Document在MongoDB中创建唯一文档,下面是我的代码

Mongoose Schema

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 请求时,它不会向我的客户端应用程序发送任何响应。这不会在服务器控制台中显示任何警告或错误。

1 个答案:

答案 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 的唯一约束,您将收到一条错误消息。执行创建时会发生这种情况。您必须在唯一约束开始工作之前重新启动应用程序。