首页 > 解决方案 > 尝试实现控制器文件

问题描述

所以,我正在尝试制作一些 Instagram 克隆……只是为了在 MERN 堆栈中进行练习。我实际上正在跟进一个教程。问题是本教程教导在 server.js 中制作几乎所有内容。因为我不认为它是干净和有组织的,所以我试图对我的代码进行一些更改。首先,我创建了一个 routes.js 文件。然后我用 mongoose.Schema({}) 创建了一个模型来创建我的对象。这里的问题是我想实现一个控制器文件以使 routes.js 更干净。我的控制器的代码:


const Post = mongoose.model("Posts");

export default function store(req, res) {
  const body = req.body;

  Post.create(body, (err, data) => {
    if (err) {
      res.status(500).send(err);
    } else {
      res.status(201).send(data);
    }
  });
}

错误:Route.post() 需要回调函数,但在 Route 获得了 [object Undefined]。[作为帖子]

我的路线代码:

import express from "express";
import PostController from "./controllers/PostController.js";
const routes = express.Router();
routes.post("/upload", PostController.store);

我的模型代码:

import mongoose from "mongoose";

const PostSchema = new mongoose.Schema({
  caption: String,
  user: String,
  image: String,
  comments: [],
});

export default mongoose.model("Posts", PostSchema);

我很抱歉这个大帖子。但我希望有人能帮帮我=)哦,其他问题......有没有更好的方法让它更有条理?我实际上不知道这是否是一个不错的选择。谢谢大家!

标签: javascriptnode.jsmongoose

解决方案


我认为问题在于您尝试访问store在您导入的东西上调用的属性。

请注意,您使用导出后控制器export default function。这意味着当你导入它时,导入本身就是那个函数。您将不会得到一个具有名为 的属性的对象store。您的store功能后控制器。

当您编写时PostController.store,您基本上是在尝试访问store在您的后控制器函数上调用的属性。但是那个函数没有这样的属性。这您正在寻找的财产。

请尝试执行以下操作:

routes.post("/upload", PostController);

推荐阅读