when i post request using postman by form data like this, i got empty object in my express js :
var storage = multer.diskStorage({
destination: function (request, file, callback) {
callback(null, 'public/images/course');
},
filename: function (request, file, callback) {
console.log(req.file)
if (request.files) {
console.log(file)
// TODO: consider adding file type extension
fileExtension = file.originalname.split('.')[1]
return callback(null, `${request.path}-${request.files[0]._id.toString()}.${fileExtension}`);
}
// fallback to the original name if you don't have a book attached to the request yet.
return callback(null, file.originalname)
}
});
var uploadImg = multer({storage : storage}).single('thumbnail')
router.post('/course', async(req, res) => {
console.log(req.body) // console logs empty object {}
try{
const course = new Course({
name : req.body.name,
thumbnail : 'placeholder'
})
uploadImg(req, res, function (err) {
if (err) {
console.log(err.message);
// An error occurred when uploading
return
}
console.log('Everything went fine');
// Everything went fine
})
}catch(e){
res.status().send()
}
})
and i cant use multer before to parse data because first i wanna generate an id by mongoose then i use multer like above.
for example i can't do it like :
router.post('/course', upload.single(), async(req, res) => {
console.log(req.body) // console logs empty object {}
try{
const course = new Course({
name : req.body.name,
thumbnail : 'placeholder'
})
uploadImg(req, res, function (err) {
if (err) {
console.log(err.message);
// An error occurred when uploading
return
}
console.log('Everything went fine');
// Everything went fine
})
}catch(e){
res.status().send()
}
})
it gives an ERROR : unexpected field.
so is there any way to get my req.body data first so i can generate my mongoose id and then upload the image
//index.js
const express = require('express')
var multer = require('multer');
require('./db/mongoose')
const userRouter = require('./routers/user')
const taskRouter = require('./routers/task')
const courseRouter = require('./routers/course')
var bodyParser = require('body-parser');
const app = express()
const port = process.env.PORT || 3000
// // for parsing application/json
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.json())
app.use(express.static('public'))
app.use(userRouter)
app.use(taskRouter)
app.use(courseRouter)
app.listen(port, () => {
console.log('connected succefully')
})
