Node.js 何时使用multer完成图像上传?

Node.js 何时使用multer完成图像上传?,node.js,express,thumbnails,multer,gm,Node.js,Express,Thumbnails,Multer,Gm,我在项目中使用multer.js进行用户注册时的用户配置文件图像上传 我需要存储用户图像文件,并使缩略图图像也。制作缩略图时,我使用的是gm.js。下面是我的密码 import { Router } from 'express'; import User from '../models/user.model'; import passport from 'passport'; import gm from 'gm'; import multer from 'multer'; const rou

我在项目中使用
multer.js
进行用户注册时的用户配置文件图像上传

我需要存储用户图像文件,并使缩略图图像也。制作缩略图时,我使用的是
gm.js
。下面是我的密码

import { Router } from 'express';
import User from '../models/user.model';
import passport from 'passport';
import gm from 'gm';
import multer from 'multer';

const router = new Router();

const upload = multer({ dest: './static/img/user/' });

const _saveThumbnail = (fileName) => {
  return new Promise((resolve, reject) => {
    gm(`img/user/${fileName}`).thumb(48, 48, `img/user/thumb_${fileName}`, 100, (err) => {
      if (err) reject(new Error(err));
      resolve();
    });
  });
};

router.post('/api/users', upload.single('img'), (req, res) => {

  const fileName = req.file ? req.file.filename : 'default.png';

  Promise.all([_getColRank(4), _getBattleRank(1000)]).then((ranks) => {
    const user = new User({
      email: req.body.email,
      nickname: req.body.nickname,
      password: req.body.password,
      img: fileName,
      introduce: req.body.introduce,
      recommender: req.body.recommender,
      colPoint: 4,
      colRank: ranks[0],
      battleRank: ranks[1],
    });

    _saveThumbnail(fileName).then(() => {
      User.register(user, user.password, (err, savedUser) => {
        if (err) return res.status(500).send(err);
        passport.authenticate('local')(req, res, () => {
          res.json({ savedUser });
        });
      });
    });
  });
});

export default router;
我假设
upload.single('img')
,这是post的中间件,完成了图像上传,因此
gm
将上传的图像制作成缩略图。但什么也没发生
\u saveThumbnail
返回
resolve()
,原始图像已上载


我真的很想做缩略图。帮帮我。

我找到了答案。错误的点是图像路径

我改变了我的代码如下

import { Router } from 'express';
import User from '../models/user.model';
import passport from 'passport';
import gm from 'gm';
import multer from 'multer';

const router = new Router();

const upload = multer({ dest: './static/img/user/' });

const _saveThumbnail = (imagePath) => { // edited arg
  return new Promise((resolve, reject) => {
    gm(imagePath).thumb(48, 48, `${imagePath}_thumb`, 100, (err) => { // edited
      if (err) reject(new Error(err));
      resolve();
    });
  });
};

router.post('/api/users', upload.single('img'), (req, res) => {

  const fileName = req.file ? req.file.filename : 'default.png';
  const imagePath = req.file ? req.file.path : null; // added
  Promise.all([_getColRank(4), _getBattleRank(1000)]).then((ranks) => {
    const user = new User({
      email: req.body.email,
      nickname: req.body.nickname,
      password: req.body.password,
      img: fileName,
      introduce: req.body.introduce,
      recommender: req.body.recommender,
      colPoint: 4,
      colRank: ranks[0],
      battleRank: ranks[1],
    });

_saveThumbnail(imagePath).then(() => { // edited arg
  User.register(user, user.password, (err, savedUser) => {
    if (err) return res.status(500).send(err);
    passport.authenticate('local')(req, res, () => {
      res.json({ savedUser });
    });
  });
});
  });
});
导出默认路由器