1

管理者がログインして、一般公開されていないデータを見ることができるログイン システムを作成しようとしています。現在、データベースで管理インスタンスを見つけようとしています。2 つのノード ファイルが app.jsあり ます。account_manager.js

app.js

//creates node app
var express = require('express');
var app = express();
var mongoose = require('mongoose');
var AM = require('./account_manager');

//stuff...
/***************************************
LOGIN 
***************************************/
app.post('/login', function(req, res){

    AM.manualLogin(req.param('username'), req.param('password'), function(e, o){
        if (!o){
            res.send(e, 400);
        }   else{
            req.session.user = o;
            res.send(o, 200);
        }
    });
});

account_manger.jsで必要app.jsとされ、AM に格納されます

account_manager.js:

var express = require('express');
var app = express();
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost');


var admin_db = mongoose.connection; 

admin_db.on('error', console.error.bind(console, 'connection error: '));
//connection open?
admin_db.once('open', function callback(){
   console.log("User Database connection open!\n");
 });
var User_Schema = new mongoose.Schema({username: String, password: String});

var Admin = mongoose.model('Admin', User_Schema);

exports.manualLogin = function(user, pass, callback)
{
admin_db.find({username: user},function(err,docs){ //error is here
    if(docs){
        var x = 0;
        var flag = false;
        while(docs[x]){ //goes through all the admins
            if (docs[x].param("username") == user){ //if it's a match
                callback(null, docs);
                flag = true;
                break;
                }
            x+=1;
            }
        if (flag == false){
            callback('invalid-password/username');
            }
    }

});
}

TypeErrorは言う:

Object #<NativeConnection> has no method 'find'

私の問題は何ですか?

4

2 に答える 2

2

私自身はまだ node.js に慣れていませんが、とにかく答えてみます。

mongoose を介して mongodb への接続を適切に構築したようですが、スキーマを作成していません。mongodb にはスキーマがありませんが、mongoose にはスキーマがあります。

必要なことは、ユーザー コレクション内のユーザー ドキュメントの構造に一致するスキーマ (UserSchema) を作成し、そのスキーマ (User) のインスタンスを作成してモデルにすることです。次に、そのモデルで .find を呼び出します。 .

Mongoose クイック スタート ガイドでは、次のプロセスについて説明しています: http://mongoosejs.com/docs/index.html

更新後の編集:

現在、admin_db.find を呼び出しています。これは存在しません。これはあなたが得ているエラーです。

これを Admin.find に変更する必要があります。また、違いが何であるかを理解する必要があります。

もう一度編集:

admin_db.once コールバックを適切に使用していません。

リンクした Mongoose クイック スタート ガイドを読み直すことをお勧めします。それは非常に短く、これらすべてを通過します。

于 2013-03-22T17:05:49.343 に答える