2

Express アプリを作成しましたが、その中に 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]保存しようとすると、エラーが発生します。

simple はユーザーに登録フォームを提供し、これusers/addは jade ファイルで行われます。また、投稿リクエストの名前が正しく出力されるexpress.bodyParser()ため、問題がないことも証明できます。console.log(req.body['name']);

これに関するヘルプは役に立ちます。

4

1 に答える 1

1

Mongoose の構文が正しくありません。

この行について:

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

その行はModelfunction/ constructorを返します。その結果を使用して、 のインスタンスを作成しますUser。現在取得しているすべての Users/UserSchema/User 名前空間を考えると、少し混乱するので、次のように切り替えます。

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

クラスはユーザーではなくユーザーを表しているようです。

UserModelUser のインスタンスを作成する場合は、スキーマではなくクラスのインスタンスを作成します。

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 に答える