Тело / файл запроса пуст или нет в файле node.js - PullRequest
0 голосов
/ 05 сентября 2018

У меня довольно много проблем с запросами в node.js. У меня есть маршрутизатор, который выставляет запрос router.put (в основном, я хочу внести некоторые изменения в данные, которые я хранил в MongoDB). Я храню три разные вещи, которые name, price, file(path of file) на сервере, и я храню данные на физическом жестком диске.

Я не хотел использовать patch, потому что не мог успешно завершить загрузку файла.

Чтобы проверить, пустые или нет зависимости request.body, я использую Object.keys(), но я не могу применить то же самое к request.file

выдает эту ошибку:

TypeError: Невозможно прочитать свойство 'filename' из неопределенного

И это часть моего кода: Кстати, в моем файле js есть все зависимости и требования, такие как multer, body.parser

router.put('/:productId', checkAuth, upload.single('productImage'), (req, res, next) => {
const id = req.params.productId;
var imageName = "";

Product.findById(id)
    .exec()
    .then(docs => {
        if (Object.keys(req.file.filename).length > 0) {
            imageName = docs.productImage;
            fs.unlink(__rootdir + '\\public\\uploads\\' + imageName, function(err) {
                console.log(err);
                if (err && err.code == 'ENOENT') {
                    console.info("File does not exist, will not update");
                } else if (err) {
                    console.info("Error occurred while trying to update");
                } else {}
            });
        }
        return Product.findById( {_id: id}).exec();
    })
    .then(doc => {
        if (doc) {
            if (Object.keys(req.body.name).length === 0) {doc.name =  doct.name;}
            else {doc.name = req.body.name;}

            if (Object.keys(req.body.price).length === 0) {doc.price = doc.price }
            else { doc.price = req.body.price; }

            if (Object.keys(req.file.filename).length === 0) {doc.productImage = doc.productImage;}
            else {doc.productImage = req.file.filename}

            doc.save(err => {
                if (err) {
                    res.send(err);
                }
                res.status(200).json({
                    message: 'Product Updated',
                    request: {
                        type: 'GET',
                        url: 'http://localhost:3000//products/' + id
                    }
                });
            });
        }        
    });
 });

Добавлена ​​часть кода:

const express = require('express');
const router = express.Router();
const mongoose =  require('mongoose');
const multer = require('multer');
const checkAuth = require('../middleware/check-auth');

const bodyParser = require('body-parser');

router.use(bodyParser.urlencoded());
router.use(bodyParser.json());

const fs = require('fs');

1 Ответ

0 голосов
/ 06 сентября 2018

Я решил свою проблему.

Вместо использования Object.keys(req.file.filename).length === 0 я использовал typeof(req.file) !== "undefined". Подобные действия могут определить, существуют ли данные формы (особенно о загрузке файлов) или нет. (В основном, проверяет область загрузки пусто или нет)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...