1

ノード、mongodb、mongojs について学習しようとしていますが、初心者向けの質問があります。

私のルートはこんな感じです...

server.get({path: PATH + '/:author', version: '0.0.1'}, msg.findMsgsByAuthor);

私のJSONは次のようになります...

{
    "parentId": "1234",
    "category": 1,
    "author": "George",
    "title": "Threaded Messages",
    "body": "blah blah blah blah",
    "likes": "5",
    "dislikes": "10",
    "inaccurate": "20"
}

私がやりたいことは、SQLでは簡単です-select * from msgs where author = 'George'

mongo/mongojs を使用してこれを行うにはどうすればよいですか?

私はこのようなことを試みましたが、成功しませんでした...

msgs.find({author: req.params.author}, function (err, success) { ...}

コールバックコードは

exports.findMsgsByAuthor = function (req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', '*');
    msgs.find({author: req.params.author}).sort({category: 1}, function (err, success) {
        logit(err, success);
        if (success) {
            res.send(200, success);
            return next();
        }
        return next(err);
    })
};

ここにいくつかの宣言があります

var msgs = require('../setup').msgs;
var mongojs = require('../setup').mongojs;
var db = require('../setup').db;

そしてsetup.jsは

var config = require('./config');
var connection_string = config.connectionString;
var mongojs = exports.mongojs = require('mongojs');
var db = exports.db = mongojs(connection_string, ['msg', 'user']);
var msgs = exports.msgs = db.collection("msgs");
var port = exports.port = config.port;
var ipAddress = exports.ipAddress = config.ipAddress;

そして最後に config.json

{
    "connectionString":"127.0.0.1:27017/msg",
    "ipAddress":"127.0.0.1",
    "port": "8080"
}

コードが機能しないというのは、Postman Rest Client Chrome プラグインを使用してテストすると、次の結果が得られることを意味します。

{
    "code": "InternalError",
    "message": "Argument passed in must be a single String of 12 bytes or a string of 24     hex characters"
}

でGETしようとすると

http://127.0.0.1:8080/msgs/George

msgs.findOne を使用して同様のコールバックを使用すると、期待どおりに動作します

 msgs.findOne({_id: mongojs.ObjectId(req.params.msgId)}, function (err, success) {...}

私がやろうとしていることを説明するには、それで十分なコードだと思います

任意のガイダンスをいただければ幸いです。

4

1 に答える 1

1

この男と同じオフィスで働くことは大きな助けになります。彼が直面していた問題は、2 つの異なるハンドラーを 1 つのルートにマップしていたことでした。それらを区別せずに、彼の文字列が呼び出しの一部としてビルダーGeorgeに渡され、それがエラー メッセージを生成していました。ルートが明確になるようにルートを更新すると、問題が解決しました。mongojs.ObjectIdfindOneArgument passed in must be a single String of 12 bytes or a string of 24 hex characters

于 2014-04-28T20:09:20.810 に答える