节点模块仅导出第一个函数

问题描述 投票:0回答:1

我有导出两个函数的节点模块:

const cloudinary = require('cloudinary').v2;
const config = require('config');
const winston = require('winston');


cloudinary.config({
    secure: true,
    cloud_name: 'loofy',
    api_key: config.get('cloudinary_api_key'),
    api_secret: config.get('cloudinary_secret')
});


const uploadImage = async (localImage, optionsIn) => {

    const options = {
        use_filename: true,
        unique_filename: false,
        overwrite: true
    };

    if (optionsIn) {
        Object.keys(optionsIn).forEach((key) => {
            options[key] = optionsIn[key];
        });
    }

    try {
        const result = await cloudinary.uploader.upload(localImage, options);
        return result;
    } catch (error) {
        winston.warn(error.message);
        return null;
    }
};

const destroyImage = async(public_id) => {
  const result = await cloudinary.uploader.destroy(public_id);
  return result;
  
};



exports.uploadImage = uploadImage;
exports.destrοyImage = destroyImage

在另一个模块中我导入它:

const express = require('express');
const router = express.Router();
const winston = require('winston');
const fs = require('fs');
const path = require("path");
const validateOID = require('../middleware/validateObjectId');
const auth = require('../middleware/auth');
const authadmin = require('../middleware/authadmin');
const uploadMid = require('../middleware/upload');
const {User, updateUser, createNewUser,  validateSearch} = require('../models/users');
const {uploadImage, destroyImage} = require('../models/cloudinaryUploader');
const images = require('../models/images');

router.post('/', uploadMid, /*[auth, authadmin],*/ async (req, res) => {
    const pathToDir = path.join(__dirname, "../uploads/images");
    createUploadDir(pathToDir);
    res.setHeader('Access-Control-Allow-Origin', '*');
    let newUser;
    try {
        newUser = await createNewUser(req.body);
    }
    catch(err) {
        winston.warn(err.message);
        res.status(500).send(err.message);
    }
    
    const imageData = await uploadImage(req.userImage, {upload_preset:'loofy_batch'});
    let loofyImageData = images.loofyTransform(imageData);
    loofyImageData.albums = ['_profile_album'];
    loofyImageData.tags = [];
    try {
        newUser.addUserImage(loofyImageData);
        newUser.setProfileImage(imageData.asset_id);
//        newUser.setCoverImage(imageData.asset_id);
        newUser.save();
    }
    catch(err) {
        winston.warn(err.message);
        return res.status(400).send(err.message);
    }
 
    if(req.userImage) {
        fs.unlinkSync(req.userImage);
    }        
    res.status(200).send( reformUserData(newUser) );
    
});


router.delete('/:id/images/:asset_id', /*auth,*/  async (req, res) => {
    const asset_id = req.params.asset_id;
    let user = await User.findOne({_id: req.params.id});
    if (!user) return res.status(400).send('Δεν βρέθηκε ο χρήστης');
    const image2Del = await user.images.images.find((item) =>{
        return item.asset_id === asset_id;
        });
        if(!image2Del) return res.status(400).send('Δεν βρέθηκε η εικόνα');
    try {
        const public_id = image2Del.public_id;
        await destroyImage(public_id);
        if (user.images.profile === asset_id) {
            user.images.profile = '';
        }
        await user.images.images.pull({public_id: public_id});
        user.save();    
    }
    catch(err) {
        return res.status(500).send(err.message);
    }
    return res.status(204).send('Το αρχείο διαγράφηκε επιτυχώς');
});

在路由器上将呼叫发送至

await uploadImage(req.userImage, {upload_preset:'loofy_batch'});

正在工作。

在 router.delete 对

的呼叫
await destroyImage(public_id);

抛出错误,因为 destroyImage 未定义。 我对 Node 很陌生,我挣扎了两天。 首先,我认为这是我导出代码的方式,但我在其他地方以相同的方式执行此操作,并且它有效。 通过检查第一个模块的导出,我发现两者都不是未定义的。

如有任何帮助,我们将不胜感激。

javascript node.js node-modules
1个回答
0
投票

更换这个即可

exports.uploadImage = uploadImage;
exports.destrοyImage = destroyImage

module.exports = {
  uploadImage,destroyImage
}
© www.soinside.com 2019 - 2024. All rights reserved.