MERN Stack:将表格数据保存为mLab - 格式化问题

时间:2017-07-21 06:31:40

标签: forms express mongoose mern

我从我的表格中获取数据到我的mLab,但它的格式是我不喜欢的。它就像这样

{ '{"email":"ben@benjamin.com","message":"not what i want"}': '' }

更糟糕的是它保存了这个

"data": "{\"{\\\"email\\\":\\\"ben@benjamin.com\\\",\\\"message\\\":\\\"this is ridiculous\\\"}\":\"\"}"

因此它基本上将我的数据设置为关键。我使用将我的架构更改为对象,这样我就可以节省一些东西。理想情况下,我想要每个数据的密钥。我希望以后能够访问它。我无法让身体解析器工作,所以我使用express-formidable作为中间件。有很多移动部件,如果我改变周围的东西我崩溃服务器并得到错误,无论我做什么。好的,这里是双方的一些代码。

服务器代码:

var formSchema = new Schema({
   data: Object
})
app.use(formidable());

app.post('/contact', function(req,res,next){
    console.log(req.fields)
   var item = JSON.stringify(req.fields)

   var form = new Form({data: item
}).save(function(err,data){
       if(err) throw err
       if(data) res.json(data)
   })
})

客户端代码

submitData(e){
    e.preventDefault();
    let email = this.state.value;
    let msg = this.state.value2;
    let data = {
        email: email,
        message: msg
    }
    fetch('/contact', {
  method: 'POST',
  headers: {
   'Accept': 'application/json',
   'Content-Type': 'application/x-www-form-urlencoded'
 },
 body: JSON.stringify(data)
 })  
 .then((response) => response.json())
        .then((responseData) => {
            console.log("Response:",responseData);
            this.setState({
                value: "",
                value2: "",
                status: "THANKS FOR CONTACTING ME I'LL BE IN TOUCH SOON"
            })
         }).catch((error) => {
                console.log(error)
         })
}
这让我疯了。理想情况下我想做得对。或以某种方式访问​​该对象并获取电子邮件和消息密钥,只需更改我的架构。然后我可以在我的新表格中指定键(...部分

1 个答案:

答案 0 :(得分:0)

在一个奇怪的事件扭曲中我解决了它。这可能是最好的方式,但它有效。我仍然想知道我出错的地方。我看到了一个教程,其中表单数据很容易保存...从反应前端没有被授予...无论如何这就是我所做的

我的自定义解决方案

var formSchema = new Schema({
   email: String,
   message: String
})
app.use(urlencodedParser);
app.post('/contact', function(req,res,next){
    var item = Object.keys(req.body)
    var o = JSON.parse(item[0])
    var e = o.email
    var m = o.message
    console.log(e)
   //var item = JSON.stringify(req.fields)
   var form = new Form({email: e,message: m
}).save(function(err,data){
       if(err) throw err
       if(data) res.json(data)
   })
})

我从强大的方式切换回身体解析器,但无论哪种方式我都得到了那个奇怪的对象

我仍然不知道为什么我的数据对象是{'{'key':'value'}':''}我认为我的问题出在服务器端......但也许这与我发送POST的方式有关。一个更聪明,更有经验的人很难找到:)