【问题标题】:POST method return an empty object in Nodejs [duplicate]POST方法在Nodejs中返回一个空对象[重复]
【发布时间】:2020-10-11 16:50:48
【问题描述】:

我有一个简单的表格:

<form method="POST">
    <div class="form-group">
        <label>Email address</label>
        <input type="email" name="email" class="form-control" />
    </div>
    <div class="form-group">
        <label>Password</label>
        <input type="password" name="password" class="form-control" />
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

我有一个简单的模型:

const User = mongoose.model('User', {
    email: {
        type: String,
    },
    password: {
        type: String,
    }
});

还有一个简单的post方法

.post(async (req, res) => {
    console.log(req.body);
    const user = new User(req.body);
    try {
        const saveUser = await user.save();
        res.send(saveUser);
    } catch (error) {
        res.send(error);
    }
}

然而,当我在 HTML 文件中提交表单时,我得到一个空对象。我已经尝试了每一个 SO 解决方案,但没有一个对我有用。

注意:我正在使用 JSON 解析器:app.use(express.json());

请帮忙?

【问题讨论】:

    标签: javascript html node.js json


    【解决方案1】:

    您的 form 未发送 JSON 编码数据。相反,它使用application/x-www-form-urlencodedLonger read 因此,您要么需要 bodyParser,要么发送 JSON 编码的表单数据。

    【讨论】:

    • 这些文章已经过时了..你有具体的解决办法吗?
    • @user12499410 — 它们并没有过时,与 相关的第二个问题 是一个特定的解决方案。
    【解决方案2】:

    尝试将用户实例转换为 JSON 字符串:res.send(saveUser.toJSON());

    【讨论】:

    • 对我不起作用
    【解决方案3】:

    确保您已安装 body-parser 并将其导入您的项目。 npm i body-parser

     const bodyParser = require("body-parser")    
     app.use(bodyParser.urlencoded({ extended: true }));
    

    这是我熟悉的创建新条目的方法

    let email = req.body.email
    let password = req.body.password
    let user = {email: email, password: password}
    
    User.create(user, (err, newUser) => {
      if(err) // handle err
      else // do something - redirect, etc..
    })
    

    【讨论】:

      【解决方案4】:

      已解决:

      app.use(express.urlencoded({
          extended: true
      }));
      

      【讨论】:

      • 虽然此代码可以解决 OP 的问题,但最好包含关于您的代码如何解决 OP 问题的说明。通过这种方式,未来的访问者可以从您的帖子中学习,并将其应用到他们自己的代码中。 SO 不是编码服务,而是知识资源。此外,高质量、完整的答案更有可能得到支持。这些功能,以及所有帖子都是独立的要求,是 SO 作为一个平台的一些优势,使其与论坛区分开来。您可以编辑以添加其他信息和/或使用源文档补充您的解释。
      猜你喜欢
      • 2019-01-18
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 2017-02-28
      • 1970-01-01
      • 2021-12-12
      • 2015-02-15
      相关资源
      最近更新 更多