【问题标题】:Posting to MongoDB, What am I doing wrong?发布到 MongoDB,我做错了什么?
【发布时间】:2019-11-23 22:34:47
【问题描述】:

我试图向 MongoDB 发布一个新条目,我知道这个问题是我在服务器文件中调用我的路由的地方,但我不知道如何解决这个问题。我需要能够在 postman 中测试 API 并发布到数据库。

我收到以下错误:

/Users/ryan/Desktop/leasequery/operations-backend/node_modules/express/lib/router/index.js:458 throw new TypeError('Router.use() 需要一个中间件函数但得到一个' + gettype(fn)) ^

TypeError: Router.use() 需要一个中间件函数但得到一个对象 在 Function.use (/Users/ryan/Desktop/leasequery/operations-backend/node_modules/express/lib/router/index.js:458:13) 在功能。 (/Users/ryan/Desktop/leasequery/operations-backend/node_modules/express/lib/application.js:220:21) 在 Array.forEach () 在 Function.use (/Users/ryan/Desktop/leasequery/operations-backend/node_modules/express/lib/application.js:217:7) 在对象。 (/Users/ryan/Desktop/leasequery/operations-backend/server.js:12:5) 在 Module._compile (internal/modules/cjs/loader.js:778:30) 在 Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) 在 Module.load (internal/modules/cjs/loader.js:653:32) 在 tryModuleLoad (internal/modules/cjs/loader.js:593:12) 在 Function.Module._load (internal/modules/cjs/loader.js:585:3) 在 Function.Module.runMain (internal/modules/cjs/loader.js:831:12) 启动时(内部/bootstrap/node.js:283:19) 在 bootstrapNodeJSCore (内部/bootstrap/node.js:622:3) [nodemon] 应用程序崩溃 - 启动前等待文件更改...

我正在使用中间件(express-validator)

server.js

const express = require("express");
const connectDB = require("./config/db");

const app = express();

connectDB();

app.use(express.json({ extended: false }));

app.get("/", (req, res) => res.json({ msg: "Welcome to Operations" }));

app.use("/api/status", require("./routes/status"));

const PORT = process.env.PORT || 5000;

app.listen(PORT, () => console.log(`Server listening on Port ${PORT}`));

路由/status.js

const express = require("express");
const router = express.Router();
const { check, validationResult } = require("express-validator");

const Status = require("../models/Status");

router.post(
  "/",
  [
    check("name", "Please Add Name")
      .not()
      .isEmpty(),
    check("date", "Please add date")
      .not()
      .isEmpty(),
    check("comment", "Please add comment")
      .not()
      .isEmpty()
  ],
  async (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return res.status(400).json({ errors: errors.array() });
    }

    const { name, date, comment } = req.body;

    try {
      entry = new Entry({
        name,
        date,
        comment
      });

      await entry.save();
    } catch (err) {
      console.error(err.message);
      res.status(500).send("Server Error...");
    }
  }
);

模型/Status.js

const mongoose = require("mongoose");

const StatusSchema = mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  date: {
    type: Date,
    required: true
  },
  comment: {
    type: String,
    required: true
  }
});

module.exports = mongoose.model("status", StatusSchema);

【问题讨论】:

    标签: javascript node.js reactjs mongodb express


    【解决方案1】:

    路由/status.js

    const router = express.Router();
    const { check, validationResult } = require("express-validator");
    
    const Status = require("../models/Status");
    
    router.post(
      "/",
      [
        check("name", "Please Add Name")
          .not()
          .isEmpty(),
        check("date", "Please add date")
          .not()
          .isEmpty(),
        check("comment", "Please add comment")
          .not()
          .isEmpty()
      ],
      async (req, res) => {
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
          return res.status(400).json({ errors: errors.array() });
        }
    
        const { name, date, comment } = req.body;
    
        try {
          entry = new Entry({
            name,
            date,
            comment
          });
    
          await entry.save();
        } catch (err) {
          console.error(err.message);
          res.status(500).send("Server Error...");
        }
      }
    );
    
    module.exports = router;
    

    【讨论】:

    • 很高兴你能弄明白。关于这一点,请离开 Model 方法以简化您的代码:mongoosejs.com/docs/api/model.html#model_Model(create、updateOne、deleteOne 等)
    • 你知道我如何格式化我的日期,以便它们以“MM/DD/YYYY”的形式保存到数据库中
    • 默认情况下,mongo 将日期存储为 BSON:stackoverflow.com/a/6776273/7376526。如果您想以特定格式存储日期,请在 Date 之外使用 String 类型(这样您仍然可以查询日期)。
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 2016-01-29
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    相关资源
    最近更新 更多