Express 通过多部分表单使用CSRF令牌发出的POST请求在生产上产生404错误,但在本地主机上工作

Express 通过多部分表单使用CSRF令牌发出的POST请求在生产上产生404错误,但在本地主机上工作,express,deployment,csrf,multipartform-data,Express,Deployment,Csrf,Multipartform Data,所以问题是,每当我通过一个多部分表单发出POST请求时,它都会在生产环境中发出404错误(aws ec2使用nginx作为反向代理),但在本地主机上工作正常 我的表格看起来像 <form name="sell" method="POST" action="/item/sell/?_csrf=<%=locals.csrfToken%>" enctype="multipart/form-data" au

所以问题是,每当我通过一个多部分表单发出POST请求时,它都会在生产环境中发出404错误(aws ec2使用nginx作为反向代理),但在本地主机上工作正常

我的表格看起来像

<form name="sell" method="POST" action="/item/sell/?_csrf=<%=locals.csrfToken%>" enctype="multipart/form-data" autocomplete="off" class="form" role="form">
    <div class="form-group">
        <input name="name" class="form-control" placeholder="Enter the item name" required type="text">
    </div>
    <div class="form-group">
        <textarea name="description" class="form-control" placeholder="Enter the item description" required type="text" rows="5" cols="30"></textarea>
    </div>
    <div class="form-group">
        <input type="number" name="price" min="1" class="form-control" placeholder="Enter the item price" required> 
    </div>          
    <div class="form-group">
        <button class="btn btn-danger btn-sm" type="submit">Submit</button>
    </div>
</form>

提交
(我没有在表格中包含csrf隐藏输入)

如果我从表单中删除多部分的enctype,删除文件输入,包括csrf令牌的隐藏输入,并使
action=“/item/sell”
,那么即使在生产环境中也可以正常工作。这使我确信404错误是由多部分编码引起的

但我无法找出它背后的原因,我尝试过删除nginx,但这似乎也不起作用


关于多部分表单,我发现的唯一一件事是,您需要在表单的
操作
属性中包含csrf令牌,而不是将其作为输入提供。我不知道还能做些什么来让它工作。

Express本机不支持
multipart/formdata
。为此,您可以使用
multer
等模块。在处理json正文时,您可能使用了模块
正文解析器。类似地,您将需要使用一个模块来处理多部分文件上载

客户端/HTML 参考:
Express本机不支持
多部分/formdata
。为此,您可以使用
multer
等模块。在处理json正文时,您可能使用了模块
正文解析器。类似地,您将需要使用一个模块来处理多部分文件上载

客户端/HTML 参考:

如果我在问题中没有说清楚,很抱歉,但我正在使用multer,它正在按预期工作。但是你的代码帮助我意识到服务器上没有上传/文件夹,这就是我得到404的原因。这与CSRF无关。现在问题已经解决了,谢谢。如果我在问题中没有说清楚,很抱歉,但我正在使用multer,它正在按预期工作。但是你的代码帮助我意识到服务器上没有上传/文件夹,这就是我得到404的原因。这与CSRF无关。现在问题解决了,谢谢。
<form action="/profile" method="post" enctype="multipart/form-data">
  <input type="file" name="avatar" />
</form>
var express = require('express')
var multer  = require('multer')

// destination folder to store the uploads
var upload = multer({ dest: 'uploads/' })

var app = express()

app.post('/profile', upload.single('avatar'), function (req, res, next) {
  // req.file is the `avatar` file
  // req.body will hold the text fields, if there were any
})