我正在创建一个应用程序,现在我正在开发一项功能,该功能接受用户输入并将其存储在数据库中。我已经在其他项目上做了很多次,但是遇到了一个我无法解决的问题。
到目前为止,当用户键入他们的信息并按Enter键时,数据将发送到后端,并开始向端点移动。我有一个使用“创建”功能设置的控制器。如下:
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);
});
}
};
我有两个函数,因为我为每个函数尝试了一些不同的方法,但结果相同。一旦到达这一点,我会收到以下错误(“命中控制器”只是create函数中的console.log):
'hit controller'
TypeError: Cannot read property 'create' of undefined
我在浏览器的控制台中也收到以下错误:xhr.js:178 POST http://localhost:3000/listing/ 500(内部服务器错误)从saveListing错误出现错误:在createError(createError(createError.js)上请求失败,状态码为500 :16)在XMLHttpRequest.handleLoad(xhr.js:77)的定居点(settle.js:18)
哪个来自我的addListing页面:
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;
因此,请重述:当用户点击“提交”按钮时,表单运行一个函数,使用所需的路径点击API,到达服务器,然后到达发布请求的路径,然后到达llistingController。从我的Listing DB模型中提取信息时,为帖子创建功能。一旦达到创建功能,便会弹出。数据显然是不确定的,但我不知道为什么,也无法弄清楚。
我觉得我遇到的事情可能只是他妈的而已,但是我无法为自己的生活弄清楚。此外,如果有人知道一些不良的资源来添加到我的mongo / express / react知识中,我很乐意看到它。
答案 0 :(得分:0)
您正在从模型文件导入db
,但是该文件正在导出Listing
。导入Listing
并使用Listing.create
代替db.Listing.create
。
答案 1 :(得分:0)
正如223seneca所说,我将控制器中的db.Listing.create更改为Listing.create。然后,我需要将控制器文件中的清单列出为确切的文件,而不只是模型文件夹中的清单('const Listing = require('../ database / models / Listing');'而不是'const Listing = require('。 ./database/models');'。
那是我所需要的!