Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在mern堆栈中使用multer上传图像和文本_Javascript_Node.js_Express_File Upload_Multer - Fatal编程技术网

Javascript 在mern堆栈中使用multer上传图像和文本

Javascript 在mern堆栈中使用multer上传图像和文本,javascript,node.js,express,file-upload,multer,Javascript,Node.js,Express,File Upload,Multer,我在我的mern stack应用程序中使用body parser、multer和express。我需要上传一个文件以及表单中的一些文本。我发送的邮寄请求如下: function addPost(postdetail){ axios.post('http://localhost:4000/blog',postdetail,{ headers:{ "Content-Type": "multipart/form-data" }}).then(

我在我的mern stack应用程序中使用body parser、multer和express。我需要上传一个文件以及表单中的一些文本。我发送的邮寄请求如下:

    function addPost(postdetail){
  axios.post('http://localhost:4000/blog',postdetail,{ headers:{
    "Content-Type": "multipart/form-data"
}}).then(res=>{
      dispatch({
        type:'ADD_DATA',
        payload:res.data,
       
      })
      
    }).catch(error=>{ 
      console.log(error)
    })
  }
当我添加标题时,我得到一个空对象作为req.body的输出。但是,当没有添加多部分/表单数据时,我会得到另一个req.body,但只有文件是空的

我使用react钩子设置状态,并使用FormData附加文件。当附加值被记录时,我得到上传文件的所有信息。因此,我可以知道该文件已正确附加

 const Addpost=()=> {
    const [title, settitle] = useState('')
    const [des, setdes] = useState('')
    const [file, setfile] = useState(null)
    const {addPost}=useContext(Globalcontext)
    
    const handleSubmit=(e)=>{
    e.preventDefault()
    const formData = new FormData()
    formData.append('file', file[0])
    console.log([...formData])
    
    const addedValue={
        title,
        des,
       formData
    }
    addPost(addedValue)
    
    settitle('')
    setdes('')
    setfile('')
    }
        return (
            <div>
                <form onSubmit={handleSubmit}>
                    <input type="text" name="title" value={title} onChange={(e)=>settitle(e.target.value)}/>
                    <input type="text" name="des" value={des} onChange={(e)=>setdes(e.target.value)}/>
                    <input type="file" name="file" onChange={(e)=>{setfile(e.target.files)}} />
                    <button type='submit' value='submit'>Add Post</button>
                </form>
            </div>
        )
    }
    
    export default Addpost

我认为问题只存在于服务器端,我试图使用multer上传文件。在我使用axios post请求中的头之后,我无法向mongoose插入任何信息,我得到了
{}
用于控制台req.body,其他字段未定义。

由于您使用的是
multer.any()
,一系列文件将存储在
req.files
中(请参阅)

在您的情况下,您只需在上载单个图像时使用
multer.single()
,文件将在
req.file
下可用,其余表单数据将在
req.body
下可用:

exports.addPost=(upload.single('file'),(req,res)=> { ... });

我仍然得到空对象:{}当我使用upload未定义console.log(req.body)和req.file时。Single我最近回答了一个类似的问题,客户端上的表单上载不正确。检查此->可能有帮助:)否不起作用:(当我在axios post请求中添加标题时,我无法获取任何表单数据。请检查我向addPost方法发送文本和文件的方式。
exports.addPost=(upload.single('file'),(req,res)=> { ... });