Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js req.params在mongo查询中不起作用_Node.js_Mongodb_Request - Fatal编程技术网

Node.js req.params在mongo查询中不起作用

Node.js req.params在mongo查询中不起作用,node.js,mongodb,request,Node.js,Mongodb,Request,这可能有点难以解释,所以我会尽可能清楚 const express = require("express"); const router = express.Router(); const mongo = require("mongodb"); const linkId = require("./newRoute"); const DBusername = process.env.username; const DBpassword = process.env.password; const

这可能有点难以解释,所以我会尽可能清楚

const express = require("express");
const router = express.Router();
const mongo = require("mongodb");
const linkId = require("./newRoute");

const DBusername = process.env.username;
const DBpassword = process.env.password;

const numbersOnly = new RegExp('^[0-9]+$');

var linkArr = [];

router.get("/:url", function (req, res) {
    if (numbersOnly.test(req.params.url)) {
        mongo.MongoClient.connect(mongoUrl, function (err, db) {
            if (err) throw err;
            console.log("connection established")
            var cursor = db.collection("urls").find({ "id":linkId.id});
            cursor.forEach(function (doc, err) {
                if (err) throw err;
                linkArr[0] = doc.href;
            }, function () {
                db.close();
                res.redirect(linkArr[0])  
            })
        })
    } else {
        res.json({ "error": "This url is not on the database." })
    }
});
我试图用一个id号查询数据库,该id号将以相应的URL响应,并重定向到该URL。数据库中充满了URL及其各自的id号。如您所见,下面的代码将使用此行查询数据库:

var cursor = db.collection("urls").find({ "id":linkId.id});
linkId.id
是从另一个文件导入的最近插入的URL的id。一切都很完美。但是,如果我使用这一行:

var cursor = db.collection("urls").find({ "id":req.params.url});

游标
forEach
永远不会执行,我可以访问
req.params.url
,因此我不会得到任何错误。我不希望从其他文件导入id,我希望从
req.params.url
提取id(用于查询数据库)。这怎么不管用,让我难以置信

很可能是因为req.params.url是作为字符串而不是数字传递的。Mongo对数据类型非常敏感,在req.params中传递的所有项都被认为是不带强制转换的字符串。查询字符串时,如果mongo文档值是数字,则不会返回任何值


纯文本解析器可以帮助您解决这一问题,如执行
查找
时,您确定它是
id
而不是
\u id
?另外,如果
req.params.url
属于ObjectId类型,请尝试执行
mongoose.Types.ObjectId(req.params.url)
。我不清楚您遇到的问题,但我建议您记录变量的值,以检查它们是否符合所需的格式。我已记录了这些值,并且它们都符合所需的格式<代码>id
是一个单独的字段,它不是
\u id
它是一个手动创建的id,是一个随机数。我可以访问
req.params.url
(当我以正确的形式记录时),但由于某种原因,当我使用
req.params.url
时,光标的
forEach
函数从未运行。我刚刚解决了它@TarushArora这是因为我必须先将
req.params.url
转换成一个数字<代码> dB。集合(“URL”)。查找({“id”:+Req.PARAM.URL})< /Cord>工作,这相当酷,您可能想考虑与MunGDB有一个长时间运行的连接,而不是在每个请求上启动一个连接。