Skip to content

Instantly share code, notes, and snippets.

@myf9000
Last active February 18, 2018 19:43
Show Gist options
  • Save myf9000/109200069bebacfc3b4f1a7be65bdbc9 to your computer and use it in GitHub Desktop.
Save myf9000/109200069bebacfc3b4f1a7be65bdbc9 to your computer and use it in GitHub Desktop.
var fs = require('fs');
var formidable = require('formidable');
/*
ogólnie fajnie byłoby użyć es5/es6 i np zamiast var używać const i let
i import mógłby wyglądać tak
import fs from 'fs';
i fs możesz używać normalnie jak z require
nie lubie tego zapisu export.cos dużo lepiej używać module.exports (bardziej node way) poczytaj czemu
do definicji funkcji fajnie użyć fat arrow function (to się sprawdza w programowaniu funkcyjnym,
ale w obiektowym trzeba uwazac bo traci się referencje do this)
const upload = (req, res) => {
...
}
const innaFunkcja = () => console.log('lol')
module.exports = {
upload,
innaFunkcja,
}
potem z tego pliku jak chcesz uzyc tych funkcji upload gdzies indziej to robisz
import { upload } from './ten_plik'
*/
exports.upload = function(request, response) {
console.log("Rozpoczynam obsługę żadania upload");
var form = new formidable.IncomingForm();
/*
to jest funkcja asynchroniczna czyli nie wiadomo kiedy się wykona
nie masz tu w ogóle obsługi błędów co jeśli zamiast html bedzie error bo np. plik się nie wczyta?
trzeba to inaczej rozwiazać - tu masz połowicznie zrobiony callback
możesz to na 3 sposoby rozwiazac poprawnie zrobiony callback, promise, albo async/await
dla tego przykładu użyje promisa
fs.readFile('templates/upload.html')
.then(html => {
response.writeHead(200, {"Content-Type": "text/html; charset=utf-8"});
response.write(html);
...
})
.catch(console.log) // tu obsluga bledu
teraz pytanie co z form?
imo powinno być to w miejscu tych 3 kropek powyzej - tylko zapisane w postaci promisa
form.parse(request)
.then(response => {
const { _, files } = response; // destructing object
fs.renameSync(files.upload.path, "test.png"); // to nie powinno byc synchroniczne! - tylko async czyli kolejny
promise - na razie tak zostaw potem poprawimy bo nam się z tego zrobi niezła choinka
response.write("received image:<br/>");
response.write("<img src='/show' />");
response.end();
})
*/
form.parse(request, function(error, fields, files) {
fs.renameSync(files.upload.path, "test.png");
response.writeHead(200, {"Content-Type": "text/html"});
response.write("received image:<br/>");
response.write("<img src='/show' />");
response.end();
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment