首页 > 解决方案 > 表单中的 POST 方法返回 null

问题描述

我正在尝试将 post 与 express 和 bodyparser 一起使用,将数据从 ejs 文件中的表单插入 MYSQL。它一直返回null,所以似乎我的数据没有从表单解析到我的后端。能否请你帮忙?

这是我的 server.js

app.use(express.json({ limit: '100mb' }));
app.use(express.urlencoded({ limit: '100mb', extended: false }));
dotenv.config();


// Set the default views directory to html folder
app.set('views', path.join(__dirname, 'html'));

// Set the folder for css & java scripts
app.use(express.static(path.join(__dirname,'css')));
app.use(express.static(path.join(__dirname, 'node_modules')));

// Set the view engine to ejs
app.set('view engine', 'ejs');

app.use('/', routes);

app.listen(3000, () => {
    console.log(`Server is running at ${process.env.SERVER_PORT}`);
});

我的 index.js

router.post('/save', (req, res) => {
const formData = { username : req.body.username, account : req.body.account, email : req.body.email, 
    address : req.body.address, start_date : req.body.start_date, picture : req.body.picture, 
    request : req.body.request };
const sqlPut = "INSERT INTO dbTable ?";
const query = dbconn.conn.query(sqlPut, formData, (err, results) => {
    if(err) throw err;
    res.redirect('/about')
})

})

这是我的带有表单的 ejs 文件。

<div class="container" >  
<form id="contact" action="/save" method="post">
  <h3>New scholar form</h3>
  <fieldset>
    <input placeholder="username" id="username" type="text" tabindex="1" required autofocus>
  </fieldset>
  <fieldset>
    <input placeholder="account" id="account" type="text" tabindex="2" required>
  </fieldset>
  <fieldset>
    <input placeholder="email" id="email" type="email" tabindex="3" required>
  </fieldset>
  <fieldset>
    <input placeholder="bnc_address" id="bnc_address" type="text" tabindex="4" required>
  </fieldset>
  <fieldset>
    Scholar start date <input placeholder="start_date" type="date" tabindex="4" required> 
  </fieldset>
  <fieldset>
    <input placeholder="picture" id="picture" type="text" tabindex="4" required>
  </fieldset>
  <fieldset>
    <textarea placeholder="Scholar request..." id="request" tabindex="5" required></textarea>
  </fieldset>
  <fieldset>
    <button name="submit" type="submit" id="contact-submit">Submit</button>
  </fieldset>
</form>

我可以从数据库中检索数据并发布它就好了。我只是还没有弄清楚这一点。好久没发帖了,请多多包涵

标签: javascriptmysqlnode.jsexpressejs

解决方案


您需要更改此行:

app.use(express.urlencoded({ limit: '100mb', extended: true }));

将文本解析为 URL 编码数据(这是浏览器倾向于从设置为 POST 的常规表单发送表单数据的方式)并在 req.body 上公开结果对象(包含键和值)。


推荐阅读