私はExpressとbody-parserミドルウェアを使用して着信要求を処理しています。フロントエンドでは、私はちょうど隠し入力及び(パグで書かれた)提出ボタンの形があります。バックエンドでExpress.js + body-parser:POSTリクエストから空のreq.body
form(notes="saveNotesForm" action=`/lessons/${lesson._id}/notes` method="POST" enctype="application/x-www-form-urlencoded")
input(type="hidden" id="hiddenNotes" name="hiddenNotes" alt="Notes Copy" value="test").notesHidden
input(type="submit" name="saveNotes" alt="Save Notes" value="Save")
を、私はボディパーサーを使用してExpressのアプリを持っている:
const bodyParser = require('body-parser');
// ...
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
、着信要求の処理ルート:
router.post('/lessons/:lessonID/notes', lessonController.updateNotes);
// ... and in lessonController:
exports.updateNotes = async (req, res) => {
console.log('updateNotes request received');
console.log(req.body);
res.status(200).json({ status: 'success' });
}
を私はupdateNotes
でreq.body
を使用しようとすると、体が空のオブジェクトであるが、少なくとも性質を持っている必要がありhiddenNotes
の値は"test"
です。ご不明な点がある場合は、コメントをお寄せください。これは愚かな間違いだった
は[UPDATED]、私はこのフォームが送信されますときに個別のイベントハンドラを書いていた忘れてしまった - それはちょうど私が私のコードのすべてを行く前に、私はSOに投稿しました:)イベントハンドラはaxiosを使用し、次のようになります。axiosとpost
Sを作るとき
const SaveNotesButton = $('form.saveNotes');
SaveNotesButton.on('submit', ajaxSaveNotes);
function ajaxSaveNotes(e) {
e.preventDefault();
axios
.post(this.action)
.then(res => {
console.log(res.data);
})
.catch(console.error);
}
は残念ながら、あなたはこのようなオブジェクト内のデータを含める必要がある、またはそうでなければには含まれませんリクエスト:
const SaveNotesButton = $('form.saveNotes');
SaveNotesButton.on('submit', ajaxSaveNotes);
function ajaxSaveNotes(e) {
e.preventDefault();
axios
.post(this.action, { notes: this.children.hiddenNotes.value }) // Data added here
.then(res => {
console.log(res.data);
})
.catch(console.error);
}
'bodyParser.urlencoded'を' bodyParser.json'の前に呼び出すように変更しようとしましたか?違いがあるのかどうか分かりませんが、私は自分のミドルウェアを書いて生のボディ要求をキャプチャして何も失うことはなく、 'bodyPaser.json'の後に' req.on( 'end') 'イベントが私はデータを記録できません。それ以前に私のミドルウェアを置くことで(そして他のいくつかの変更)、問題を解決することができました。 – OwChallie