按下提交按钮后,此代码将“1”或“2”值作为 cookie 发送:
<form action="/setorder" method="post" class="horizontal">
<% if (req.cookies.doneAtLast == '1') { %>
<input type="hidden" name="done_at_last" value="0">
<input type="submit" value="Do not sort">
<% } else {%>
<input type="hidden" name="done_at_last" value="1">
<input type="submit" value="Sort">
<% } %>
</form>
但是,我收到 413 错误。
req.cookies.doneAtLast 现在是“{doneAtLast:'1'}”。 我尝试增加 pyload 大小:
import { Router, urlencoded, static as staticMiddleware } from 'express';
import methodOverride from 'method-override';
import { mainPage, detailedPage, addPage, add, setDone, remove, setOrder } from "./controllers/todos.js";
import { requestToContext, handleErrors } from './middleware.js';
import { mainErrorHandler, error500Handler } from './error-handlers.js';
import { todoV } from './validators.js';
import cookieParser from 'cookie-parser';
const express = require('express');
const app = express();
// Route with increased JSON payload limit (50mb)
app.post('/increased', express.json({ limit: '50mb' }), (req, res) => {
res.send('Increased JSON payload limit');
});
const router = require(app).Router();
...
router.post('/setorder', setOrder);
但这并没有帮助。
Node.js v20.18.0
[nodemon] app crashed - waiting for file changes before starting...
setOrder 控制器如下所示:
export function setOrder(req, res){
res.cookie('doneAtLast', req.body.done_at_last);
res.redirect('/');
}
我很困惑,因为我向 cookies 发送 0 或 1,但 Express 将其标记为 413 错误。
出现 413 错误是因为服务器无法正确解析传入的表单数据,可能是由于缺少中间件或配置错误。通过添加express.urlencoded中间件并确保它在路由之前应用,您可以允许服务器解析URL编码的表单数据。此外,一致使用模块语法(require 与 import)并检查其他错误将有助于防止崩溃并确保您的服务器顺利运行。