POST 来自表单的方法 returns null

POST method from form returns 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>

我可以从数据库中检索数据并且 post 它很好。我只是还没有想出这个。 我有一段时间没 post 来这里了,所以请多多包涵

您需要更改此行:

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

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

我在没有使用的情况下导入了 body-parser。在我删除导入后它开始工作了。

删除了这个,即使它没有被使用,它在以下时间开始工作:

const bodyParser = require("body-parser");