POST方法在Node.js中返回了一个空对象

4

我有一个简单的表单:

<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(Stack Overflow)解决方案,但没有一个适用于我。

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

请帮忙解决?

4个回答

3

你的 form 没有发送 JSON 编码的数据。相反,它使用了 application/x-www-form-urlencoded。因此,你需要一个 bodyParser 或者发送 JSON 编码的表单数据。更多内容请看这里


这些文章已经过时了,你有具体的解决方案吗? - user12499410
@user12499410 - 它们并不过时,而且第二个问题链接的确是一个具体的解决方案。 - Quentin

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

对我没有起作用。 - user12499410

0
请确保您已经安装了 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..
})

-1

已解决:

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

1
虽然这段代码可能解决了OP的问题,但最好还是解释一下你的代码如何解决OP的问题。这样,未来的访问者可以从您的帖子中学习,并将其应用到自己的代码中。SO不是编码服务,而是知识资源。此外,高质量、完整的答案更有可能被点赞。这些特点以及所有帖子都必须是自包含的要求,是SO作为一个平台的一些优势,使其与论坛区分开来。您可以编辑以添加其他信息和/或使用源文档补充您的解释。 - ysf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接