node.js - Angular nodejs在添加文件时出错
问题描述
您好,我正在尝试将使用 Angular 和 Nodejs 的新文件添加到我的 mongodb 数据库中后端功能在邮递员上运行良好但在前端它给了我一个错误,我不知道是什么问题
它曾经可以正常工作,直到我对后端功能进行了一些更改
这是我的POST API
router.post('/create',multer({ storage : storage}).any(), (req, res) => {
var sample = fs.readFileSync('./uploads/'+req.files[0].filename,'utf8');
function Filetostring(){
let arr = sample.split(/\r?\n/);
// Find returns the first element that matches our criteria
const step = arr.filter((step , idx)=> {
if (step.includes("step")) {
console.log(step); //this gives me the first result I need
return true;
}
return false;
});
let stepss = JSON.stringify(step)
let newString = stepss.replace(/[\[\]\'\s]/g, ' ');
let newString2 = newString.replace(/"/g, '');
let newString3 = newString2.replace(/#step/g, '');
let newString4 = newString3.replace(/,/g, '\n');
return newString4;
}
let steps = Filetostring()
console.log(steps)
var tc = new Testcase({
name: req.body.name,
upload: req.files[0].filename ,
run : steps,
modify: req.body.modify,
delete: req.body.delete,
step1: req.body.step1,
step2: req.body.step2,
step3: req.body.step3,
step4: req.body.step4,
step5: req.body.step5,
step6: req.body.step6,
step7: req.body.step7,
});
console.log(req.files[0].filename);
tc.save((err, doc) => {
if (err) { res.status(401).send("errorrrrr") }
else {
res.status(200).send(doc)
}
});
});
这是我的服务.ts
private create = 'http://localhost:5555/testcase/create';
postTestCase(testcase,file:File) {
const formData = new FormData();
formData .append('file', file);
formData .append('name', testcase.name);
formData .append('step1', testcase.step1);
formData .append('modify', testcase.modify);
formData .append('run', testcase.run);
formData .append('delete', testcase.delete);
formData .append('step2', testcase.step2);
formData .append('step3', testcase.step3);
formData .append('step4', testcase.step4);
formData .append('step5', testcase.step5);
formData .append('step6', testcase.step6);
formData .append('step7', testcase.step7);
return this.http.post<any>(this.create, formData );
}
这是我的component.ts
addtestcaseData = {'name': '',
'step1': '',
'modify': '',
'run': '',
'delete': '',
'upload': File = null,
'step2': '',
'step3': '',
'step4': '',
'step5': '',
'step6': '',
'step7':''}
addtestcase(){
this.testcaseService.postTestCase(this.addtestcaseData,this.addtestcaseData.upload)
.subscribe(
res => {
console.log(res)
this._router.navigate(['/admin'])
},
err => {
console.log(err);
}
)
};
handleFileInput(files: FileList) {
this.addtestcaseData.upload = files.item(0);
}
这是我的component.html
<div class="card rounded-0">
<div class="card-header">
<h3 class="mb-0">Add Test Case</h3>
</div>
<div class="card-body">
<form class="form" #testcaseForm="ngForm" enctype="multipart/form-data" >
<div class="form-group">
<label for="uname1">Name</label>
<input [(ngModel)]="addtestcaseData.name" class="form-control rounded-0" name="Name" type="text" required>
</div>
<div class="form-group">
<label for="file" class="mr-2">Upload Test Case</label>
<input type="file"
id="file" name="file"
(change)="handleFileInput($event.target.files)">
<!--<button (click)="addfile()" type="button" class="btn btn-success float-right">Add File</button>
-->
</div>
<button (click)="addtestcase()" type="button" class="btn btn-success float-right">Add</button>
</form>
</div>
<!--/card-block-->
</div>
解决方案
尝试使用 req.file 获取文件
var tc = new Testcase({
name: req.body.name,
upload: req.file,
run : steps,
modify: req.body.modify,
delete: req.body.delete,
step1: req.body.step1,
step2: req.body.step2,
step3: req.body.step3,
step4: req.body.step4,
step5: req.body.step5,
step6: req.body.step6,
step7: req.body.step7,
});
console.log(req.files[0].filename);
对于路线
router.post('/create',multer({ storage : storage}).single('upload'), (req, res) => {
对于前端,将输入名称更改为
<input type="file"
id="file" name="upload"
(change)="handleFileInput($event.target.files)">
推荐阅读
- r - 在 R 中,使用 ggstatsplot::ggpiestats 找不到对象“”
- flutter - 扑动的椭圆形装饰,我该怎么做?
- java - 我在为我的应用程序处理不同的错误页面时遇到问题
- git - 如何从托管服务器上的 CLI 创建 Bitbucket 存储库
- python - networkx DiGraph:对边的不同标签
- javascript - 条纹支付表单:一些表单字段出现在底部?
- r - 用 dplyr 中因子变量的模态值替换 NA 值
- javascript - 是否可以将消息从电子 IpcRenderer 发送到网页内的 html iframe?
- c - 主函数中的 printf 在 C 中返回两次
- c - 使用 Linux 'perf' 以编程方式测量 L2 缓存相关的原始计数器