2

我做了一个快速应用程序,它里面有一个叫做用户的应用程序。我正在使用打字稿。这是我的 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/addsimple 给用户一个注册表单,这是在一个jade文件中完成的。我还可以证明这不是问题,express.bodyParser()因为console.log(req.body['name']);正确打印出发布请求的名称。

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

4

1 回答 1

1

您的语法对于 Mongoose 不正确。

关于这条线:

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

该行返回一个Model函数/构造函数。您将使用该结果来创建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); }
});
于 2013-08-27T12:43:27.367 回答