如何在 Supertest 上访问 .field 值
How to access .field values on Supertest
晚上好
我正在尝试使用 REST API 上的文件和一些数据创建一个 POST 请求,我正在使用 NodeJS 进行构建。
如果不清楚,我API这个功能的目标是保存图片的寄存器,所以我想在同一个请求中发送图片文件,图片名称和编号。
我目前正在使用 Jest / supertest 进行测试并测试此特定功能,我尝试了以下方法:
const response = await request(app)
.post("/uploads/pics")
.field("name", "PicureName")
.field("number", "PictureNumber")
.attach("file", picture);
我从 https://visionmedia.github.io/superagent/#multipart-requests
读到了这个
我的问题是我无法根据我的控制器请求获得 name 和 number 的值,所以我可以' 使用它们来保存对象。
我试过很多方法,比如:
req.body.name
req.name
req.field.name
req.query.name
但其中 none 对我有用。
我也尝试打印整个请求,但是我找不到与 name、number 或 [=31= 相关的任何内容]字段那里。
有谁能告诉我哪里做错了吗?
您应该使用 https://github.com/expressjs/multer 中间件来处理文件上传。然后,req.body
将保留文本字段(如果有的话)。
例如
index.js
:
const express = require('express');
const multer = require('multer');
const app = express();
const upload = multer({ dest: 'uploads/' });
app.post('/uploads/pics', upload.single('file'), (req, res) => {
console.log(req.body);
console.log(req.file);
res.sendStatus(200);
});
module.exports = app;
index.test.js
:
const request = require('supertest');
const app = require('./');
const path = require('path');
const { expect } = require('chai');
describe('62862866', () => {
it('should pass', async () => {
const picture = path.resolve(__dirname, './test.jpg');
const response = await request(app)
.post('/uploads/pics')
.field('name', 'PicureName')
.field('number', 'PictureNumber')
.attach('file', picture);
expect(response.status).to.be.eq(200);
});
});
集成测试结果:
62862866
[Object: null prototype] { name: 'PicureName', number: 'PictureNumber' }
{ fieldname: 'file',
originalname: 'test.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: 'uploads/',
filename: '181b96eb9044aac5d50c8c1e3159a120',
path: 'uploads/181b96eb9044aac5d50c8c1e3159a120',
size: 0 }
✓ should pass (84ms)
1 passing (103ms)
晚上好
我正在尝试使用 REST API 上的文件和一些数据创建一个 POST 请求,我正在使用 NodeJS 进行构建。 如果不清楚,我API这个功能的目标是保存图片的寄存器,所以我想在同一个请求中发送图片文件,图片名称和编号。
我目前正在使用 Jest / supertest 进行测试并测试此特定功能,我尝试了以下方法:
const response = await request(app)
.post("/uploads/pics")
.field("name", "PicureName")
.field("number", "PictureNumber")
.attach("file", picture);
我从 https://visionmedia.github.io/superagent/#multipart-requests
读到了这个我的问题是我无法根据我的控制器请求获得 name 和 number 的值,所以我可以' 使用它们来保存对象。
我试过很多方法,比如:
req.body.name
req.name
req.field.name
req.query.name
但其中 none 对我有用。
我也尝试打印整个请求,但是我找不到与 name、number 或 [=31= 相关的任何内容]字段那里。
有谁能告诉我哪里做错了吗?
您应该使用 https://github.com/expressjs/multer 中间件来处理文件上传。然后,req.body
将保留文本字段(如果有的话)。
例如
index.js
:
const express = require('express');
const multer = require('multer');
const app = express();
const upload = multer({ dest: 'uploads/' });
app.post('/uploads/pics', upload.single('file'), (req, res) => {
console.log(req.body);
console.log(req.file);
res.sendStatus(200);
});
module.exports = app;
index.test.js
:
const request = require('supertest');
const app = require('./');
const path = require('path');
const { expect } = require('chai');
describe('62862866', () => {
it('should pass', async () => {
const picture = path.resolve(__dirname, './test.jpg');
const response = await request(app)
.post('/uploads/pics')
.field('name', 'PicureName')
.field('number', 'PictureNumber')
.attach('file', picture);
expect(response.status).to.be.eq(200);
});
});
集成测试结果:
62862866
[Object: null prototype] { name: 'PicureName', number: 'PictureNumber' }
{ fieldname: 'file',
originalname: 'test.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: 'uploads/',
filename: '181b96eb9044aac5d50c8c1e3159a120',
path: 'uploads/181b96eb9044aac5d50c8c1e3159a120',
size: 0 }
✓ should pass (84ms)
1 passing (103ms)