我有一個簡單的 html 表單:
<div class="signup-form">
<h2>Signup for an account</h2>
<form method="POST" action="/submit-signup">
<input type="text" title="username" placeholder="username" />
<input type="password" title="username" placeholder="password" />
<button type="submit" class="btn">Submit</button>
</form>
</div>
和一個帶有路由的 index.js:
var bodyParser = require('body-parser')
const express = require('express')
const app = express()
const port = 3000
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
const Pool = require('pg').Pool
const pool = new Pool({
user: 'user',
host: 'localhost',
database: 'app',
password: 'password',
port: 5432,
})
app.get('/', function(req, res) {
res.sendFile(__dirname '/index.html');
});
app.get('/login', function(req, res) {
res.sendFile(__dirname '/login.html');
});
app.get('/signup', function(req, res) {
res.sendFile(__dirname '/signup.html');
});
app.post('/submit-signup',(req, res) => {
console.log(req.body)
const username = req.body.username
const password = req.body.password
pool.query('INSERT INTO users (username, password) VALUES ($1, $2)', [username, password], (error, results) => {
if (error) {
throw error
}
response.status(201).send(`User added with ID: ${result.insertId}`)
})
})
app.listen(port, () => {
console.log(`App running on port ${port}.`)
})
每次提交帶有答案的表單時,請求正文記錄為 {} 并且由于空值(我的資料庫中的列設定為非空)而從查詢中拋出錯誤。我已經嘗試了舊堆疊溢位帖子中的大多數修復程式,因此感謝您提供任何幫助
uj5u.com熱心網友回復:
您的問題是因為您沒有在 HTML 表單中使用名稱標簽。
<div class="signup-form">
<h2>Signup for an account</h2>
<form method="POST" action="/submit-signup">
<input type="text" name="username" title="username" placeholder="username" />
<input type="password" name="password" title="password" placeholder="password" />
<button type="submit" class="btn">Submit</button>
</form>
</div>
uj5u.com熱心網友回復:
您正在使用body-parser中間件。默認情況下,此中間件將嘗試根據給定的 json 值將每個 http 正文決議為 js 物件。
當您通過 HTML 表單發送資料時,此資料不是 JSON 表示形式,而是由 HTML 表單生成的資料。Mozilla 規格
要完成這項作業,您要么需要實作一種讀取 HTML 表單發送的正文的方法,要么使用更現代的方法通過向您的快速服務器發送 (REST) JSON 請求。
- 為了使您的代碼作業
body-parser.urlencoded()用作 HTML 表單資料是一個 url 編碼的文本Ref to existing Stackoverflow answer - 為了使您的表單更現代,請使用 JavaScript 框架并遵循客戶端-服務器模式。使用 express看看本教程REST 教程
uj5u.com熱心網友回復:
在 html 輸入欄位中添加 name 屬性
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/395731.html
標籤:节点.js PostgreSQL的 形式 表达 要求
