multer().single() returns 是做什么的?
What do multer().single() returns?
我遇到了如何处理 multer 的错误,但我无法理解它的流程。
var multer = require('multer')
var upload = multer().single('avatar')
app.post('/profile', function (req, res) {
upload(req, res, function (err) {
if (err) {
// An error occurred when uploading
return
if (err instanceof multer.MulterError) {
// A Multer error occurred when uploading.
} else {
// An unknown error occurred when uploading.
}
// Everything went fine
// Everything went fine.
})
})
我无法理解的地方:-
什么是 multer().single() returns 以及我们如何在路由器处理程序中使用它(上传功能),如代码所示?
编辑 :
我找不到源代码,multer 中为 .single() 函数写了什么。谁能给我提供link给它?
编辑 2
我曾尝试用以下方式处理错误,但它不起作用。有什么问题吗?
const storage = new gridfsStorage({
url : 'mongodb://localhost:27017/uploadeditems' ,
file : (req , file) => {
if(file.mimetype === 'image/jpeg') {
return {
filename : file.originalname,
bucketName : 'Images'
}
}
else if(file.mimetype === 'application/pdf') {
return {
filename : file.originalname ,
bucketName : 'projectPDFs'
}
}
else {
return null
}
}
})
upload = multer({storage })
app.get('/' , (req , res) => {
res.render('upload')
})
app.post('/upload' , upload.single('pproject') , async (req, res) => {
res.render('upload' , {
msg : "File has been uploaded successfully"
})
} ,
(err , req , res) => {
res.json({
msg : "Some error occured"})
)
我假设如果发生某些错误,upload.single() 将调用 next(err) ,它将被最后一个错误处理程序捕获。
multer().single()
returns 期望使用参数 (req, res, callback)
.
调用的中间件函数
它可以作为中间件自动调用,如:
app.post('/profile', multer().single('avatar'), (req, res) => {
// access uploaded file in req.file
});
以这种方式使用时,回调是 Express next
参数。
或者,如果您想更好地控制出现错误时发生的情况,那么您可以手动调用它,如您问题中的代码所示,您自己的代码会看到错误,而不仅仅是转移到已安装的 Express 错误处理程序。
我遇到了如何处理 multer 的错误,但我无法理解它的流程。
var multer = require('multer')
var upload = multer().single('avatar')
app.post('/profile', function (req, res) {
upload(req, res, function (err) {
if (err) {
// An error occurred when uploading
return
if (err instanceof multer.MulterError) {
// A Multer error occurred when uploading.
} else {
// An unknown error occurred when uploading.
}
// Everything went fine
// Everything went fine.
})
})
我无法理解的地方:-
什么是 multer().single() returns 以及我们如何在路由器处理程序中使用它(上传功能),如代码所示?
编辑 :
我找不到源代码,multer 中为 .single() 函数写了什么。谁能给我提供link给它?
编辑 2
我曾尝试用以下方式处理错误,但它不起作用。有什么问题吗?
const storage = new gridfsStorage({
url : 'mongodb://localhost:27017/uploadeditems' ,
file : (req , file) => {
if(file.mimetype === 'image/jpeg') {
return {
filename : file.originalname,
bucketName : 'Images'
}
}
else if(file.mimetype === 'application/pdf') {
return {
filename : file.originalname ,
bucketName : 'projectPDFs'
}
}
else {
return null
}
}
})
upload = multer({storage })
app.get('/' , (req , res) => {
res.render('upload')
})
app.post('/upload' , upload.single('pproject') , async (req, res) => {
res.render('upload' , {
msg : "File has been uploaded successfully"
})
} ,
(err , req , res) => {
res.json({
msg : "Some error occured"})
)
我假设如果发生某些错误,upload.single() 将调用 next(err) ,它将被最后一个错误处理程序捕获。
multer().single()
returns 期望使用参数 (req, res, callback)
.
它可以作为中间件自动调用,如:
app.post('/profile', multer().single('avatar'), (req, res) => {
// access uploaded file in req.file
});
以这种方式使用时,回调是 Express next
参数。
或者,如果您想更好地控制出现错误时发生的情况,那么您可以手动调用它,如您问题中的代码所示,您自己的代码会看到错误,而不仅仅是转移到已安装的 Express 错误处理程序。