【问题标题】:can't make post request to remote database using mlab-mongodb?无法使用 mlab-mongodb 向远程数据库发出 post 请求?
【发布时间】:2018-08-17 13:58:45
【问题描述】:

我正在尝试使用 postman-chorme 扩展向我的数据库发出发布请求 网址为http://localhost:5000/api/users/register

在发出 post 请求之前,它运行完美并且不会出错,但是在 post 请求之后它会抛出错误,

gd@gd10:~/Desktop/find-geeks$ npm run server
> find-geeks@1.0.0 server /home/gd/Desktop/find-geeks
> nodemon server.js
[nodemon] 1.18.3[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*[nodemon] starting `node server.js`
Server is running at port no 5000MongoDB connectedTypeError: Cannot read property 'email' of undefined
    at router.post (/home/gd/Desktop/find-geeks/routes/api/users.js:22:34)
    at Layer.handle [as handle_request] (/home/gd/Desktop/find-geeks/node_modules/express/lib/router/layer.js:95
:5)    at next (/home/gd/Desktop/find-geeks/node_modules/ex
press/lib/router/route.js:137:13)    at Route.dispatch (/home/gd/Desktop/find-geeks/node_
modules/express/lib/router/route.js:112:3)    at Layer.handle [as handle_request] (/home/gd/Deskto
p/find-geeks/node_modules/express/lib/router/layer.js:95
:5)
    at /home/gd/Desktop/find-geeks/node_modules/express/
lib/router/index.js:281:22
    at Function.process_params (/home/gd/Desktop/find-geeks/node_modules/express/lib/router/index.js:335:12)
    at next (/home/gd/Desktop/find-geeks/node_modules/express/lib/router/index.js:275:10)
    at Function.handle (/home/gd/Desktop/find-geeks/node_modules/express/lib/router/index.js:174:3)
    at router (/home/gd/Desktop/find-geeks/node_modules/express/lib/router/index.js:47:12)
    at Layer.handle [as handle_request] (/home/gd/Desktop/find-geeks/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/home/gd/Desktop/find-geeks/node_modules/express/lib/router/index.js:317:13)
    at /home/gd/Desktop/find-geeks/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/home/gd/Desktop/find-geeks/node_modules/express/lib/router/index.js:335:12)
    at next (/home/gd/Desktop/find-geeks/node_modules/express/lib/router/index.js:275:10)
    at expressInit (/home/gd/Desktop/find-geeks/node_modules/express/lib/middleware/init.js:40:5)

我可以连接远程数据库,但无法发布请求。 users.js 文件抛出错误,

router.post("/register", (req, res) => {
  User.findOne({ email: req.body.email }).then(user => {
    if (user) {
      return res.status(400).json({ email: "Email value exists already." });
    } else {
      console.log("user not found");
      const avator = gravator.url(req.body.email, {
        s: "200", //Size of gravator in pixels
        r: "pg", //rating,
        d: "mm" //default value= 'mm'
      });
      // create user
      const newUser = new User({
        name: req.body.name,
        email: req.body.email,
        avator,
        password: req.body.password
      });

我可以在 mlab 连接远程数据库

gd@gd10:~/Desktop/find-geeks$ mongo ds225382.mlab.com:25382/findgeeks -u gdgeek -p gd@123
MongoDB shell version v3.6.6
connecting to: mongodb://ds225382.mlab.com:25382/findgeeks
MongoDB server version: 3.6.6
rs-ds225382:PRIMARY> show dbs
2018-08-17T10:21:06.243+0530 E QUERY    [thread1] Error: listDatabases failed:{
        "operationTime" : Timestamp(1534481464, 1),
        "ok" : 0,
        "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0, $clusterTime: { clusterTime: Timestamp(1534481454, 1), signature: { hash: BinData(0, E3909ED95273847820FEF45BA1D664D60F796DB2), keyId: 6590452867025338369 } }, $db: \"admin\" }",
        "code" : 13,
        "codeName" : "Unauthorized",
        "$clusterTime" : {
                "clusterTime" : Timestamp(1534481464, 1),
                "signature" : {
                        "hash" : BinData(0,"cF9xY92R3CPeenwCnvqzuNBhtkw="),
                        "keyId" : NumberLong("6590452867025338369")
                }
        }
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:65:1
shellHelper.show@src/mongo/shell/utils.js:849:19
shellHelper@src/mongo/shell/utils.js:739:15
@(shellhelp2):1:1
rs-ds225382:PRIMARY>

我的完整代码在这里github

【问题讨论】:

  • 您是否尝试过使用本地 mongodb 服务器?
  • 你已经评论了body-parsergithub.com/ganeshdeshmukh1612/connect-geeks/blob/master/…中的第13和14行你需要取消评论,这样才能在req.body中获取数据
  • 在发表评论时,我评论了app.use() bodyparser,根据@ArifKhan,取消评论解决了我的错误。

标签: node.js mongodb express mongoose mlab


【解决方案1】:

要使用req.body,您需要body-parser。

要添加正文解析器(在您的项目目录中):

npm install --save body-parser

然后在您的user.js 中,添加这一行(在顶部):

const bodyParser = require("body-parser");
router.use(bodyParser.json());

【讨论】:

  • 感谢 nikhil,但我通过在 server.js 中取消注释 bodyparser 解决了这个问题
  • 是的,问题出在body-parser。这就是我上面提到的。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
  • 2020-09-17
相关资源
最近更新 更多