【问题标题】:Construct mongodb query with AJAX使用 AJAX 构造 mongodb 查询
【发布时间】:2017-06-26 18:23:14
【问题描述】:

我正在尝试通过下面的 ajax 获取电子邮件 example@email.com 的用户数:

function getCount(event) {
event.preventDefault();

var queryCount = {
    email:'example@email.com'
}

$.ajax({
    type: 'GET',
    data: queryCount,
    url: '/countuser',
    dataType: 'JSON'
}).done(function(response) {
    //Check for successful (blank) response
    if(response.msg === '') {

    } else {

    }
});
}

这在 users.js 中:

exports.countuser = function(db) {
return function(req, res) {
    db.collection('userlist').find(req.body).count(function(err,count) {
      res.send(count);
    });
  }
};

但这不起作用(获取完整用户列表的计数,这让我认为 req.body 是空的)。解决这个问题的正确方法是什么?

【问题讨论】:

  • 您收到什么回复?即console.log(count)
  • 既然这是一个获取,那么req.body 是否为空,req.params 是否填充了您的数据?
  • 呸!在开发工具中弹出打开您的网络请求选项卡 - 发出请求的 url 是什么?另外,您的app.get 路线是什么样的?
  • 将您的路线更改为:app.get('/countuser/:email',然后检查req.params
  • @tymeJV 他不能在 url 中有那个,这是一个电子邮件地址

标签: javascript jquery node.js mongodb express


【解决方案1】:

您可能不想只传递req.body,而是获取您发布的参数。但这可能没问题,只要您设置了正文解析器。有一个更好的调用,但是

app.use(express.bodyParser());

但你的函数的问题可能是你没有传递req

exports.countuser = function(db,req,res) {

那么您需要传入的不仅仅是 db,还需要传入reqres

虽然您没有在问题中发布它,但您的 route 定义需要更改。路由的参数是 reqres,因为这是传入的:

app.get('/countuser',function(req,res) {

    user.countuser(db,req,res);

所以目前您只是得到 count,作为响应中的一个数字。到目前为止,这就是您所要求的。但这只是一个数字,不是 JSON。所以你需要改变一下。

var countResponse = {};

countResponse.count = count;
res.body(countResponse);

您还有一个 object 作为您传入的数据。这不是 url 编码的,请使用 $.param 帮助器:

.ajax({
    type: 'GET',
    data: $.param(queryCount),
    url: '/countuser',
    dataType: 'JSON'
}).done(function(response) {

简而言之,这里有很多问题。花点时间通读文档。

【讨论】:

  • 谢谢,但现在的问题不是 countResponse,而是我的 ajax 请求的正文和参数为空
  • @Allen 写到一半,触发了保存。
  • 我得到一个未定义的请求:app.get('/countuser', user.countuser(db, req ,res)); export.countuser = function(db, req, res) {...}
  • @Allen 路由上的调用不正确。查看编辑。
  • 将其更改为您的实现方式,但未完全从 ajax 调用中获得响应
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多