提问者:小点点

完全卡住了。(MongoDB/MERN问题)


我正在创建一个应用程序,现在我正在开发一个能够接收用户输入并将其存储在数据库中的功能。我在其他项目上做过很多次,但遇到了一个我无法解决的问题。

到目前为止,当用户输入他们的信息并点击回车键时,数据将被发送到后端,而start的数据将被发送到endpoint。我用“创建”功能设置了一个控制器。具体如下:

   const db = require('../database/models');

module.exports = {

// create: function(req, res) {
//     console.log('hit controller');
//     db.Listing
//       .create(req.body)
    //       .then(dbModel => res.json(dbModel))
    //       .catch(err => res.status(422).json(err));
    //   }

    create: function(req, res) {
    console.log('!!!!HERE:CONTROLLERS' + req.body.receiver);
    db.Listing
        .create(req.body)
        .then(function(dbModel) {
            console.log(dbMessage);
            res.json(dbModel)
        })
        .catch(function(err) {
            res.json(err);
        });
    }
    };

我有两个函数,因为我尝试了一些不同的东西,每个都有相同的结果。一旦它到达这一点,我得到以下错误(命中控制器只是创建函数中的console.log):

    'hit controller'
TypeError: Cannot read property 'create' of undefined

在浏览器上的控制台中,我还收到以下错误:xhr。js:178员额http://localhost:3000/listing/500(内部服务器错误)saveListing错误错误:请求失败,状态代码为500,位于XMLHttpRequest的结算(结算.js:18)处的createError(createError.js:16)处。手动加载(xhr.js:77)

这是来自我的地址列表页面:

handleFormSubmit = (event) => {
 event.preventDefault();
 console.log('hit');
 console.log("state in handle submit", this.state.title)
    if (
        this.state.title &&
        this.state.description &&
        this.state.duration &&
        this.state.datesAvailable &&
        this.state.tags 
    ) {
        API.saveListing({ 
            title: this.state.title,
            description: this.state.description,
            duration: this.state.duration,
            datesAvailable: this.state.datesAvailable,
            tags: this.state.tags
        }) 
            .then(res => console.log('success'))
            .catch((err) => console.log("err from saveListing", err));
    }
};

这是我的模型文件:

var mongoose = require("mongoose");


var Schema = mongoose.Schema;


var ListingSchema = new Schema({
  // `title` is of type String
  title: {
    type: String,
    required: true
  },
  description: {
    type: String,
    required: true
  },
  duration: {
    type: String,
    required: true
  },
  datesAvailable: {
    type: String,
    required: true
  },
  hashtags: {
    type: Array,
    required: true
  }
});


var Listing = mongoose.model("Listing", ListingSchema);


module.exports = Listing;

所以重新定义:当用户点击submit按钮时,表单运行一个函数,点击API和它需要的路由,前往服务器,然后是post请求的路由,然后是post的create函数的llistingController,同时从我的清单DB模型中提取。一旦到达create函数,它就会弹出。这些数据显然没有定义,但我不知道为什么,也弄不明白。

我觉得我遇到的可能是最基本的,但我一辈子都搞不清楚。此外,如果有人知道一些坏屁股资源来增加我的蒙戈/快递/反应知识,我很乐意看到它。


共2个答案

匿名用户

您正在从模型文件导入db,但该文件正在导出列表。导入列表并使用列表。创建而不是db。表册创建

匿名用户

正如塞内卡所说,我改变了db。表册在我的控制器中创建一个列表。创造然后我要求在控制器文件中列出精确的文件,而不仅仅是models文件夹('const Listing=require('../database/models/Listing');'而不是“const Listing=require(“../database/models”);”。

这就是我所需要的!