快速搜索功能问题

时间:2015-06-22 22:29:40

标签: javascript node.js mongodb express mongoose

所以我正在为一个todo应用程序开发一个api,我已经实现了我的4个基本功能,但我正在尝试实现一个搜索功能。它是我第一次测试它,但现在每次我尝试使用它时,无论我的查询是什么,我都会返回相同的任务。任何帮助都会很棒。我的搜索功能也在我的app.js文件中,因为我无法让它在我的tasks.js文件中正常运行。

App.js

var express = require('express'),
    routes = require('./routes'),
    http = require('http'),
    tasks = require('./routes/tasks'),
    mongoose = require('mongoose'),
    task = require('./routes/search');
var Task = require('./models/task').Task; 




// MongoDB Connection 
mongoose.connect('mongodb://localhost/task_tracker');
var app = express();



        app.configure(function() {
            app.set('port', 3000);
            app.set('views', __dirname + '/views');
            app.set('view engine', 'jade');
            app.use(express.favicon());
            app.use(express.logger('dev'));
            app.use(express.bodyParser());
            app.use(express.methodOverride());
            app.use(app.router);
            app.use(express.urlencoded());
            app.use(express.json());

        });
        app.use(function(req, res, next) {
          res.header("Access-Control-Allow-Origin", "*");
          res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
          next();
        });


        app.get('/', routes.index);
        app.get('/tasks', tasks.index);
        //app.get('/search', tasks.FindByQuery);
        //app.get('/tasks/:task.:name?', task.FindByQuery); 
        app.get('/search', function(req, res) {
            var query = req.query
            //res.send(query['name']);
            Task.findOne(query['name'], function(err, doc) {
                if(!err && doc) {
                    res.json(200, doc);
                } else if(err) {
                    res.json(500, { message: "Error loading task." + err});
                } else {
                    res.json(404, { message: "Task not found."});
                }
            });
            //res.end(JSON.stringify(query));
        });
        app.get('/tasks/:id', tasks.show);
        app.post('/tasks', tasks.create);
        app.put('/tasks', tasks.update);
        app.del('/tasks', tasks.delete);

        http.createServer(app).listen(app.get('port'), function() {
            console.log("Express server listening on port 3000");

    });

Tasks.js

var Task = require('../models/task').Task; 
/*
 * Tasks Routes
 */
exports.index = function(req, res) {
  Task.find({}, function(err, docs) {
    if(!err) {
      res.json(200, { tasks: docs });  
    } else {
      res.json(500, { message: err });
    }
  });
}

exports.show = function(req, res) {

  var id = req.params.id; 
  Task.findById(id, function(err, doc) {
    if(!err && doc) {
      res.json(200, doc);
    } else if(err) {
      res.json(500, { message: "Error loading task." + err});
    } else {
      res.json(404, { message: "Task not found."});
    }
  });
}

exports.create = function(req, res) {

  var task_name = req.body.task_name; // Name of task. 
  var description = req.body.task_description;  // Description of the task

  //Task.findOne({ name: task_name }, function(err, doc) {  // This line is case sensitive.
  Task.findOne({ name: { $regex: new RegExp(task_name, "i") } }, function(err, doc) {  // Using RegEx - search is case insensitive
    if(!err && !doc) {

      var newTask = new Task(); 

      newTask.name = task_name; 
      newTask.description = description; 

      newTask.save(function(err) {

        if(!err) {
          res.json(201, {message: "Task created with name: " + newTask.name });    
        } else {
          res.json(500, {message: "Could not create task. Error: " + err});
        }

      });

    } else if(!err) {

      // User is trying to create a task with a name that already exists. 
      res.json(403, {message: "Task with that name already exists, please update instead of create or create a new task with a different name."}); 

    } else {
      res.json(500, { message: err});
    } 
  });

}

exports.update = function(req, res) {

  var id = req.body.id; 
  var task_name = req.body.task_name;
  var task_description = req.body.task_description; 

  Task.findById(id, function(err, doc) {
      if(!err && doc) {
        doc.name = task_name; 
        doc.description = task_description; 
        doc.save(function(err) {
          if(!err) {
            res.json(200, {message: "Task updated: " + task_name});    
          } else {
            res.json(500, {message: "Could not update task. " + err});
          }  
        });
      } else if(!err) {
        res.json(404, { message: "Could not find task."});
      } else {
        res.json(500, { message: "Could not update task." + err});
      }
    }); 
}

exports.delete = function(req, res) {

  var id = req.body.id; 
  Task.findById(id, function(err, doc) {
    if(!err && doc) {
      doc.remove();
      res.json(200, { message: "Task removed."});
    } else if(!err) {
      res.json(404, { message: "Could not find task."});
    } else {
      res.json(403, {message: "Could not delete task. " + err });
    }
  });
}

search.js

var Task = require('../models/task').Task; 

exports.FindByQuery = function(req, res) {
    var query = req.query
        //res.send(query['name']);
        Task.findOne(query['name'], function(err, doc) {
            if(!err && doc) {
                res.json(200, doc);
            } else if(err) {
                res.json(500, { message: "Error loading task." + err});
            } else {
                res.json(404, { message: "Task not found."});
            }
        });
        //res.end(JSON.stringify(query));
    });

task.js

var mongoose = require('mongoose')
  , Schema = mongoose.Schema;

var taskSchema = new Schema({
    name          : { type: String, required: true, trim: true, index: { unique: true } }
  , description   : { type: String, required: true }
  , date_created  : { type: Date, required: true, default: Date.now }
});

var task = mongoose.model('task', taskSchema);

module.exports = {
  Task: task
};

1 个答案:

答案 0 :(得分:0)

我最终搞清楚了,我只需要稍微改变一下我的功能。我的错误是我的findOne函数的格式。

{