【发布时间】:2020-11-30 16:01:10
【问题描述】:
我正在尝试使用 fastify 创建一个使用 multipart/form-data 的 api。我正在使用fastify-multer 插件来尝试发送文件,以便我可以将它们传递给另一个 3rd 方 api。现在我只是尝试使用 Postman 进行测试,但是当我使用 png/pdf 文件发出发布请求时,request.files 未定义。我尝试跟随fastify-multer 文档,稍作修改。我将路由保存在单独的目录中,然后使用fastify-autoload 将它们引入。server.js 正在注册我所有的插件,并且我有一个启动服务器的index.js(并且工作正常,所以我没有包括在下面)。这是我的设置:
server.js
const path = require('path')
const fp = require('fastify-plugin')
const autoload = require('fastify-autoload')
const multer = require('fastify-multer')
const upload = multer({ storage: multer.memoryStorage() })
async function registerPlugins(server, config) {
server
.register(multer.contentParser)
.register(require('fastify-cors'), config.cors)
.register(require('fastify-helmet'))
.register(require('fastify-sensible'))
// auto-register all plugins
.register(autoload, {
dir: path.join(__dirname, 'plugins'),
ignorePattern: /.*test.js/,
options: config
})
// auto-register all routes
.register(autoload, {
dir: path.join(__dirname, 'routes'),
ignorePattern: /.*test.js/,
options: config
})
server.decorate('upload', upload)
}
module.exports = fp(registerPlugins)
my.routes.js
const fp = require('fastify-plugin')
const { createMerchantSchema } = require('./schema')
async function myRoutes(server, options) {
server.post(
'/merchant/:merchantId/uploadAttachment',
{ preHandler: server.upload.array('files', 8) },
async (request, reply) => {
console.log('FILES:')
console.log(request.files)
return reply.code(200).send('SUCCESS')
}
)
}
module.exports = fp(myRoutes)
我不会麻烦您显示我的目录结构,但我还有 6 条其他路由(此处未显示)运行良好,并且服务器启动时没有错误。这是我发送POST /merchant/12345/uploadAttachment时的控制台输出:
[nodemon] starting `node index.js`
[1597110502609] INFO (96323 on 7L6BHR2.agrium.com): Server listening at http://0.0.0.0:3333
[1597110502609] INFO (96323 on 7L6BHR2.agrium.com): Server running at: http://0.0.0.0:3333
[1597110510972] INFO (96323 on 7L6BHR2.agrium.com): incoming request
reqId: 1
req: {
"method": "POST",
"url": "/merchant/123456/uploadAttachment",
"hostname": "localhost:3333",
"remoteAddress": "127.0.0.1",
"remotePort": 51207
}
FILES:
undefined
[1597110510981] INFO (96323 on 7L6BHR2.agrium.com): request completed
reqId: 1
res: {
"statusCode": 200
}
responseTime: 8.47090208530426
我不会自己发送Content-Type: multipart/form-data 标头。邮递员很聪明,可以添加它,不提供它意味着我不必越过自己的边界。
我真的不确定这里出了什么问题。有没有人这样设置fastify-multer?有什么我想念的吗?我要拔头发了!任何建议将不胜感激。提前谢谢!!!
【问题讨论】:
-
你检查
server.upload.array('files', 8)是否返回一个函数? -
是的,它显示为
[Function: multerPreHandler]
标签: javascript node.js postman multer fastify