javascript - 从 POST 请求正文 NodeJS 和 Angular 获取文件
问题描述
我正在开发一个 MEAN Stack 应用程序,我正在尝试管理一个允许用户在提交时上传文件的表单。它似乎在客户端工作,但是当我从客户端发送发布请求并检查请求正文时,文件是一个空对象。它只是一个小的 .docx 文件,所以它的大小应该很好。但我不明白为什么没有正确接收到请求,因为请求没有错误。我的印象是文件可以通过这种方式发送。
我错过了什么吗?
来自角度服务的代码
sendApplcation(data : any): Observable <any>
{
return this.http.post(this.url+ '/careers/api/application', data);
}
节点代码
router.post("/api/application", (req, res) => {
const application = req.body;
console.log(req.body.file);
let email = {
to: `${req.body.email}`,
from: "Careers@TrueLogistics.ca",
subject: "Application Recieved",
text: JSON.stringify(req.body),
html: `<p> ${JSON.stringify(req.body)} </p>`,
};
mailer.sendMail(email, (err, res) => {
if (err) {
console.log(err);
}
});
email.to = "mjayfalconi@gmail.com";
mailer.sendMail(email, (err, res) => {
if (err) {
console.log(err);
}
});
res.json("Applcation Submitted Successfully!");
});
解决方案
multer
在 npm 上查看包。
文件上传的工作方式与正常请求略有不同。
您还将设置enctype
为multipart
在前端。
此外,我看到您正在使用nodemailer
将文件作为附件发送。阅读有关附件的文档。您不会那样发送文件。
//Dependencies
const multer = require('multer');
//Multer DiskStorage Config
const diskStorage = multer.diskStorage(
{ destination: 'assets/profile_upload'} );
//Create Multer Instance
const upload = multer({ storage: diskStorage });
//File upload
//or app.post()
router.post('/upload-file', upload.single('file'), (req, res) => {
//The file
console.log(req.file)
;});
//Your code:
app.post('/upload', (req, res) => { ... try doing app.post('/upload' ,upload.single('file'),
另请查看这篇文章:https ://stackoverflow.com/a/61341352/9662626
抱歉格式不好。我目前只能使用我的手机。
推荐阅读
- python - 在 React 文件夹结构中将杂项文件、脚本放在哪里?
- excel - 基于excel数字计数的IF语句
- c - 更改按钮样式(C win32)
- ios - 您的规范来源都不包含满足依赖项的规范:Firebase (~> 6.33.0)、Firebase (= 6.33.0, ~> 6.33.0)
- javascript - 如何在使用 jquery 填写表单之前禁用提交表单按钮?
- php - 为 Laravel 8 路由定义命名空间
- javascript - 使用 React Hooks,使用“useState”和“useEffect”,有没有办法渲染一个状态,直到状态有一个值?
- python - python __module__ dunder 是 __main__
- ios - Xcode 12.0 iOS 13+ UIViewController() viewWillDisappear() 问题
- python-3.x - 摆脱 Python shapefile 图中的多余线条?