404尝试加载MEAN Web应用程序时出错

时间:2013-11-20 17:45:51

标签: node.js mongodb angularjs express crud

所以我正在尝试使用MEAN堆栈(Angular,MongoDB,Nodejs,Express)设置一个基本的Todo列表/ CRUD应用程序,当我在目录中切换路由和模型时我一直遇到麻烦并尝试在命令提示符下通过节点服务器加载应用程序。当我移动任何东西时,下面的错误是我通过命令提示错误得到的。只是一个FYI,我是一个完全NOOB。

App listening on port 3000
GET /api/todos 404 2ms

GET /api/todos 500 7ms - 1.36kb

ReferenceError: Todo is not defined



 at app.delete.Todo.remove._id (C:\Users\Basel\WebstormProjects\TEST\node-tod
o-tut1-starter\server.js:41:3)
    at callbacks (C:\Users\Basel\WebstormProjects\TEST\node-todo-tut1-starter\no
de_modules\express\lib\router\index.js:164:37)
    at param (C:\Users\Basel\WebstormProjects\TEST\node-todo-tut1-starter\node_m
odules\express\lib\router\index.js:138:11)
    at pass (C:\Users\Basel\WebstormProjects\TEST\node-todo-tut1-starter\node_mo
dules\express\lib\router\index.js:145:5)
    at Router._dispatch (C:\Users\Basel\WebstormProjects\TEST\node-todo-tut1-sta
rter\node_modules\express\lib\router\index.js:173:5)
    at Object.router (C:\Users\Basel\WebstormProjects\TEST\node-todo-tut1-starte
r\node_modules\express\lib\router\index.js:33:10)
    at next (C:\Users\Basel\WebstormProjects\TEST\node-todo-tut1-starter\node_mo
dules\express\node_modules\connect\lib\proto.js:193:15)
    at Object.methodOverride [as handle] (C:\Users\Basel\WebstormProjects\TEST\n
ode-todo-tut1-starter\node_modules\express\node_modules\connect\lib\middleware\m
ethodOverride.js:48:5)
    at next (C:\Users\Basel\WebstormProjects\TEST\node-todo-tut1-starter\node_mo
dules\express\node_modules\connect\lib\proto.js:193:15)
    at multipart (C:\Users\Basel\WebstormProjects\TEST\node-todo-tut1-starter\no
de_modules\express\node_modules\connect\lib\middleware\multipart.js:86:27)
app.post('/api/todos', function(req, res) {

    // create a todo, information comes from AJAX request from Angular
    Todo.create({
        text : req.body.text,
        done : false
    }, function(err, todo) {
        if (err)
            res.send(err);

        // get and return all the todos after you create another
        Todo.find(function(err, todos) {
            if (err)
                res.send(err)
            res.json(todos);
        });
    });

});

// delete a todo
app.delete('/api/todos/:todo_id', function(req, res) {
    Todo.remove({
        _id : req.params.todo_id
    }, function(err, todo) {
        if (err)
            res.send(err);

        // get and return all the todos after you create another
        Todo.find(function(err, todos) {
            if (err)
                res.send(err)
            res.json(todos);
        });
    });
});

// application -------------------------------------------------------------
app.get('*', function(req, res) {
    res.sendfile('./public/index.html'); // load the single view file (angular will handle the page changes on the front-end)
});

1 个答案:

答案 0 :(得分:0)

(假设您从客户端发送正确的_id),您必须将_id重建为BSON对象。 不知道你使用的是什么数据库驱动程序,但是在mongoskin中就是这样:

var mongo = require('mongoskin');
var BSON = mongo.BSONPure;

...

var proper_id = BSON.ObjectID(req.params.todo_id)

mangoose试试以下内容:

var todo = Todo.find({_id : req.params.todo_id});
todo.remove(callback(err, todo)); // callback is optional