【问题标题】:MongoDB mongojs nodeMongoDB mongojs 节点
【发布时间】:2014-04-27 19:20:06
【问题描述】:

我正在尝试学习node、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) {...}

我认为这应该足以解释我正在尝试做的事情

任何指导将不胜感激。

【问题讨论】:

  • 你的回调码是多少?
  • 您可以编辑您的原始帖子以包含您在评论中添加的代码。您还应该在声明msgs 的位置发布代码。就目前而言,这里不足以真正帮助您。你仔细看MongoJS docs了吗?我确信那里有足够的内容让您入门。
  • 是的,我查看了文档,尝试了一些方法 - 显然是错误的。我仍在看着他们并试图理解,但我想我会在此期间问一下。
  • 您在包括相关代码方面做得很好,但恐怕“不工作”是对任何问题最没有帮助的描述——什么不工作?你得到一个错误,或者根本没有结果(一个空白页或什么)?如果您将req.params.author 替换为已知良好的值,它会起作用吗?当您调用 msgs.find 时,msgs 在范围内吗?

标签: node.js mongodb mongojs


【解决方案1】:

和这个人在同一个办公室工作很有帮助。他面临的问题是他将 2 个不同的处理程序映射到一条路线。它们之间没有区别,他的字符串 George 作为 findOne 调用的一部分被传递给 mongojs.ObjectId 构建器,并且生成了 Argument passed in must be a single String of 12 bytes or a string of 24 hex characters 错误消息。更新路线以使它们不同解决了这个问题。

【讨论】:

  • 谢谢...假人又来了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 2016-02-10
  • 2014-06-07
  • 2013-06-03
  • 1970-01-01
相关资源
最近更新 更多