2017-02-18 5 views
-1

Извините, я, как правило, плохой писатель, когда я не полностью проснулся, позвольте мне пересмотреть.Экспресс-узел сервера возвращает значение для вызова асинхронного клиента

Я использую expressjs с паспортными парами (локальная стратегия) для управления моим сервером и с помощью connect-busboy для управления загрузкой файлов. Я не думаю, что паспорт будет играть роль в этом.

Вот код сервера для управления загрузкой файлов:

app.post('/upload', isLoggedIn, (req, res) => { 
     if(req.busboy){ 
      req.pipe(req.busboy); 
      req.busboy.on('file', (fieldname, file, filename, encoding, mimetype) => { 
       if(mimetype.match(/^image\//)){ 
        var root = path.join(__dirname, "../public/images/"); 
        if(fs.existsSync(path.join(root, filename))){ 
         var name = getUnique(path.join(root, filename)); 
        } else { 
         var name = filename; 
        } 
        var ws = fs.createWriteStream(path.join(root, name), { flags: "a" }); 
        file.pipe(ws); 
       } 
      }); 
     } 
    }); 

Что касается моей страницы клиента, он используется, чтобы изменить объект JSON, который получит повторно загружен на сервер в качестве инструмента конфигурации. Когда я загружаю новое изображение асинхронно, мне нужно получить имя файла, чтобы обновить этот объект JSON во время работы над ним. Для загрузки с клиентов я использую dropzonejs, который не требует какой-либо конфигурации с моей стороны для работы.

Итак, в итоге я загружаю несколько изображений через dropzone асинхронно, busboy и fs на моем сервере, сохраняя файл, и я хотел бы получить имя файла, возвращенное на мой javascript, для изменения существующего объекта JSON.

Редактировать решение:

Благодаря Эллиот Blackburn для указал мне в правильном направлении.

Позвонив:

ws.on('close',() => { 
    res.send({filename: name}); 
}); 

после file.pipe(ws); отправить ответ обратно клиенту. На стороне клиента измените зону падения, чтобы обрабатывать ответ так:

dropzone.on('success', (file, res) => { 
    console.log(res); 
}); 

ответ

1

Просто отправьте его в обычном ответе HTTP. Это будет зависеть от того, какую библиотеку вы используете, но большинство из них позволит вам вызвать обычный req, res, следующий экспресс-вызов. Из этого вы можете получить доступ к файловому объекту и вернуть все, что хотите.

Что-то вроде:

req.send({filename: name}); // name is the filename var set earlier in the code. 

После того, как вы закончили редактирование файла и таким образом, вы можете получить имя и поместить его в этот возвращаемый объект и ваш клиент получит, что в качестве объекта в качестве ответа, который вам может действовать.

+0

Спасибо, с этим и посмотрев API Dropzone, используя dropzone.on ('success', (file, res) => {console.log (res)} Я смог получить имя файла назад. это было res.send. будет обновлять сообщение с помощью решения. – Drew

+0

@ Дрю фантастический, рад, что вы нашли ответ –

 Смежные вопросы

  • Нет связанных вопросов^_^