【问题标题】:TypeError from Mongoose来自 Mongoose 的 TypeError
【发布时间】:2013-08-30 03:40:26
【问题描述】:

我制作了一个快速应用程序,它内部有一个名为 users 的应用程序。我正在使用打字稿。这是我的 app.js 文件的样子:

///<reference path='d.ts/DefinitelyTyped/node/node.d.ts' />
///<reference path='d.ts/DefinitelyTyped/express/express.d.ts' />
///<reference path='routes/Users.ts' />

import express = require("express");
import http = require("http");
import path = require("path");
import us = require("./routes/Users");

var app = express();

// all environments
app.set('port', 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.set('env', 'development');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(require('less-middleware')({ src: __dirname + '/public' }));
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
    app.use(express.errorHandler());
}

app.get('/', (req, res) => {
    res.render("index", {
        title: "Express Main Page"
    });
});


// Users app
app.use(us.Users.users);

http.createServer(app).listen(app.get('port'), () => {
    console.log('Express server listening on port ' + app.get('port'));
});

现在,问题是这样的,我正在使用 mongoose 来存储一些数据,并且我已经启动了 mongodb。下面是 Users.ts 文件的样子:

/// <reference path='../d.ts/DefinitelyTyped/node/node.d.ts' />
/// <reference path='../d.ts/DefinitelyTyped/express/express.d.ts' />
/// <reference path='../d.ts/DefinitelyTyped/mongoose/mongoose.d.ts' />

import express = require("express");
import mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/SimpleBlog");

export module Users {

    // Exporting information about the user class
    export var users: Express = express();
    export var base_URL: string = "/users";

    // Making Schemas
    var UserSchema = new mongoose.Schema({
        email: String,
        name: String,
        age: Number
    });

    // Attaining users
    var db_Users = mongoose.model('Users', UserSchema);

    var list;
    db_Users.find({}, (err, docs) => {
        list = docs;
        console.log(docs);
    });

    // Route for base url
    users.get(base_URL, (req, res) => {
        res.render("Users/index", {
            title: "User List",
            user_list: list
        });
    });


    // Route for POST request
    users.post(base_URL + "/add", (req, res) => {

        try {
            console.log(req.body['name']);

            new UserSchema({
                name: req.body['name'],
                email: req.body['email'],
                age: req.body['age']
            }).save(function (err, docs) {
                    if (err) { console.log(err); }
                });
        } catch (Exception) {
            console.log(Exception);
        }
        res.redirect(base_URL);
    });

    users.get(base_URL + "/add", (req, res) => {
        res.render("Users/add", {});
    });

}

当我尝试保存时,我得到 [TypeError: object is not a function] 作为错误。

users/add 简单的给用户一个注册表单,这是在一个玉文件中完成的。我还可以证明express.bodyParser() 没有问题,因为console.log(req.body['name']); 正确打印出发布请求的名称。

任何有关这方面的帮助都会有所帮助。

【问题讨论】:

标签: javascript mongodb express mongoose typescript


【解决方案1】:

您的语法对于 Mongoose 不正确。

关于这一行:

// Attaining users
var db_Users = mongoose.model('Users', UserSchema);

该行返回一个Model 函数/constructor。您将使用该结果创建User 的实例。鉴于您现在拥有的所有 Users/UserSchema/User 命名空间,这有点令人困惑,所以我将切换它:

// Attaining users
var UserModel = mongoose.model('User', UserSchema);

看起来这个类代表一个用户,而不是用户。

当您想要创建用户的实例时,您将创建 UserModel 类的实例而不是架构:

new UserModel({
    name: req.body['name'],
    email: req.body['email'],
    age: req.body['age']
}).save(function (err, docs) {
        if (err) { console.log(err); }
});

【讨论】:

  • 非常感谢。我已经有一段时间了。我不敢相信这个错误是如此愚蠢。
猜你喜欢
  • 2018-03-28
  • 2014-11-09
  • 1970-01-01
  • 2019-06-28
  • 1970-01-01
  • 2018-04-07
  • 2019-03-29
  • 2018-09-26
  • 2018-12-29
相关资源
最近更新 更多