【问题标题】:404 error trying to load MEAN web app尝试加载 MEAN Web 应用程序时出现 404 错误
【发布时间】:2013-11-21 03:31:40
【问题描述】:

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

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)
});

【问题讨论】:

    标签: node.js mongodb angularjs express crud


    【解决方案1】:

    (假设您从客户端发送正确的 _id)您必须将 _id 重建为 BSON 对象。 不知道你用的是什么 db-driver,但是在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
    

    【讨论】:

    • 使用猫鼬!我会试试这个。
    • 它必须支持 BSON 对象
    猜你喜欢
    • 2018-09-02
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    相关资源
    最近更新 更多