【问题标题】:NodeJs, AngularJs, Mongoose giving error: TypeError: Object.keys called on non-object at Function.keys (native)NodeJs、AngularJs、Mongoose 给出错误:TypeError: Object.keys 在 Function.keys 的非对象上调用(本机)
【发布时间】:2016-02-12 18:48:54
【问题描述】:

这是我与问题相关的代码: server.js 文件:

app.post('/user', function(req,res){
    console.log(req.body);
    var user = mongoose.Schema('User',req.body);
    user.save(function(err,user){
        if(err) console.log(err);
        console.log("Successfully added user to MongoDB");
    });
    res.sendStatus(200);
});

角度控制器:

app.controller('RegisterController',['$scope','$http',function($scope,$http){
    $scope.submitData = function(user){
        var dob = user.dob.day.toString()+"/"+user.dob.month.toString()+"/"+user.dob.year.toString();
        user.dob = dob;
        var post = $http.post('/user', user);
        post.success(function(data,status,headers,config){
                console.log(data);
                console.log(status);
                console.log('Success!');
            });  
    }
    $scope.countTo= function(count){
        var array = [];
        for(i = 1; i<=count; i++){
            array.push(i);
        }
        return array;
    }
    $scope.countFrom = function(startingPoint,count){
        var numbers = [];
        for(i=startingPoint; i>startingPoint-count;i--){
            numbers.push(i);
        }
        return numbers;
    }
}

Mongoose 架构:

    var mongoose = require('mongoose');

var userSchema = mongoose.Schema({
    email: { 
        type:String,
        required: true
    },
    dob: {
        type: String,
        required: true
    },
    password: {
        type:String,
        required:true
    },
    postcode: {
        type:String,
        required:true
    },
    address: {
        type:String,
        required:true
    }
});

var User = mongoose.model('User',userSchema);

这是错误:

SyntaxError: Unexpected token o
    at Object.parse (native)
    at P:\learning\Blink\server.js:35:41
    at Layer.handle [as handle_request] (P:\learning\Blink\node_modules\express\lib\router\layer.js:95:5)
    at next (P:\learning\Blink\node_modules\express\lib\router\route.js:131:13)
    at Route.dispatch (P:\learning\Blink\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (P:\learning\Blink\node_modules\express\lib\router\layer.js:95:5)
    at P:\learning\Blink\node_modules\express\lib\router\index.js:277:22
    at Function.process_params (P:\learning\Blink\node_modules\express\lib\router\index.js:330:12)
    at next (P:\learning\Blink\node_modules\express\lib\router\index.js:271:10)
    at serveStatic (P:\learning\Blink\node_modules\express\node_modules\serve-static\index.js:74:16)
    at Layer.handle [as handle_request] (P:\learning\Blink\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (P:\learning\Blink\node_modules\express\lib\router\index.js:312:13)
    at P:\learning\Blink\node_modules\express\lib\router\index.js:280:7
    at Function.process_params (P:\learning\Blink\node_modules\express\lib\router\index.js:330:12)
    at next (P:\learning\Blink\node_modules\express\lib\router\index.js:271:10)
    at P:\learning\Blink\node_modules\body-parser\lib\read.js:129:5

当我点击网站上的发送按钮时出现错误...请帮助?

【问题讨论】:

  • “当我点击网站上的发送按钮时发生错误。” 不,它没有......它在执行 server.js 的第 35 行时发生。那是什么线?
  • 您对 mongoose.schema 的使用似乎有点……奇怪。通常您在服务器初始化期间而不是在 http 请求期间定义架构。
  • 第 35 行是:var user = mongoose.Schema('User',req.body);
  • 你会初始化一个猫鼬模式是什么?你能给我举个小例子吗?
  • 您还能提供其他帮助吗?

标签: javascript angularjs node.js mongodb mongoose


【解决方案1】:

看起来你在这里做的 Mongoose 方面有点不对劲。不是 100% 确定这是您的错误的原因,但它仍然存在问题。

var user = mongoose.Schema('User',req.body);

这不是你认为的那样。 Schema 需要一个表示 Schema 的对象作为第一个参数,例如 {email:String, dob:String}。在这里传递字符串“用户”是行不通的。

相反,您希望引用已定义的模型。你可以这样做

  • 导出并随后将您的用户模型包含为一个模块,如 var User = require('UserModel.js')
  • 或直接从 Mongoose 引用模型(假设它在调用之前已在应用程序中定义),例如 var User = mongoose.model('User);

一旦您引用了 Model 对象,您就可以初始化一个新文档。在您的情况下,您可能希望您的代码读取类似

的内容

var user = new User(req.body); user.save(function(err,user){...}

尝试一下,如果您仍然看到该错误,请告诉我们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-26
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 2018-03-28
    相关资源
    最近更新 更多