Nodejs上的猫鼬错误“ .post不是函数”

时间:2019-04-28 13:38:54

标签: node.js mongoose

我用Mongoose在nodejs express上做了一个路由器。

当我通过邮递员发送const { clientID, orderID } = req.body;时,

await matching.save();运行良好。 但是之后,它会产生如下错误。
您能帮我解决这个问题吗?非常感谢。

  

TypeError:matching.post不是函数       在router.post(D:\ Dev \ matching \ matching \ routes \ match ing.js:24:20)       在process._tickCallback(internal / process / next_tick.js:68:7)

var express = require("express");
var router = express.Router();
const Matching = require("./../models/matching");

function wait(time) {
  return new Promise(resolve => {
    setTimeout(resolve, time);
  });
}

router.post("/orderpost", async (req, res, next) => {
  try {
    const { clientID, orderID } = req.body;
    const listOn = true;

    const matching = new Matching({
      clientID,
      orderID,
      listOn
    });

    await matching.save();

    await matching.post("save", (doc, next) => {
      wait(3000).then(() => {
        console.log("good");
        next();
      });
    });

    res.send("good");
  } catch (err) {
    console.error(err);
  }
});

我还添加了模式模型。
    const mongoose = require(“ mongoose”);

const { Schema } = mongoose;
const MatchingSchema = new Schema({
  clientID: String,
  riderID: [String],
  orderID: String,
  listOn: Boolean
});

module.exports = mongoose.model("Matching", MatchingSchema);

1 个答案:

答案 0 :(得分:1)

post方法可用于Schema而非Model。应该在您的架构上调用它。

MatchingSchema.post("save", (doc) => {
  console.log("good");
});

此外,您不需要致电wait(不确定为什么这样做)。仅在执行save后才调用它。

来自docs

  

post中间件在该钩子方法及其所有前置中间件完成之后执行。