Всем привет,
Я провел тест кода на очистку кода Nodejs/Express и понял, что не совсем понимаю, как работает Nodejs/Express и какие новейшие стили написания используют синтаксис ES6/7. Итак, здесь я хочу сделать краткий обзор того, что я сделал и чему научился.
Экспресс для чего?
Nodejs — это только среда выполнения, как и Java и Python, для реализации веб-запросов HTTP необходимо использовать платформу Express для выполнения операций CURD.
Особенности Экспресс?
Короче говоря, Express — это серия вызовов промежуточного программного обеспечения. то есть ПОЛУЧИТЬ что-то из API
localhost:3000/api/delivery/au?id=5
промежуточная функция выглядит следующим образом:
app.get('/:id', function(res,req,next) { const region = req.params.region; const id = req.query.id; // get data from request URL console.log("region:" + " " + region); next(); //pass to the next middleware }, function(res,req,next) { res.json({ region:region, id:id }); } // send request data );
Дополнительные сведения об операциях промежуточного программного обеспечения см. на веб-сайте Expressjs.
Экспресс ВС. другие фреймворки (например, Koa)
Express — не единственный фреймворк для управления HTTP-запросами, Koa также является фреймворком для этого, и я видел в некоторых статьях, что по сравнению с Express это
- более легкий
- может создавать надежные приложения
- поддерживать больше синтаксиса ES6/7
но я никогда не использовал это, поэтому я просто оставлю это для будущей проверки :)
Держите свое приложение Node в ногу со временем! (ES6/7)
На самом деле, я только начал знакомиться с Nodejs около полугода назад, поэтому я никогда не использовал обратные вызовы в приложении Node, но в тесте кода есть обратные вызовы, поэтому мне нужно знать, как это работает, а затем изменить их на обещания.
Функция обратного вызова VS Promise
Оба они используются для асинхронного программирования.
Я так понимаю: Promise дает возможность использовать асинхронный код в другом месте, вам не нужно передавать его во вложенную функцию, вы можете просто сослаться на объект Promise. Вот пример использования обратного вызова:
т. е. Следующий фрагмент кода показывает, что обратный вызов передается в функцию asyncExample, а переменная данных вычисляется, а затем сохраняется в функции обратного вызова для последующего использования. В функции useAsyncExample данные используются для добавления в результирующий массив.
function asyncExample (callback){ let data = 1; data++; callback(data); } ... function useAsyncExample (callback) { let result = []; asyncExample(function(data) { result.push(data); }); }
Для меня использование обратных вызовов здесь требует немного логики, поскольку у обратного вызова нет имени, поэтому, если обратные вызовы передаются во вложенных функциях, мне нужно найти начальное местоположение обратного вызова, а затем организовать логику вызова, что раздражает!
Если мы используем обещание, все может быть проще. Вот пример обещания:
function asyncExamplePromiseVersion () { let data = 1; // do sth with data return new Promise((resolve, reject) => { //error handling if (data !== 5 ) { reject(); } else resolve(data); } async function useAsyncPromise () { const result = asyncExamplePromiseVersion(); await result.then(data => console.log(data)); }
Если мы используем объект-обещание, нам не нужно помнить о передаче обратных вызовов, и мы также можем присвоить объекту-обещанию имя (здесь мы называем его результатом), чтобы я мог вспомнить, что это такое и для чего оно предназначено.
Обещание может иметь только две возможности (разрешить или отклонить) после завершения обработки. и функция .then разворачивает то, что происходит в промисе (чтобы увидеть, были ли данные обработаны должным образом).
Подводя итог, обещание имеет преимущества перед обратными вызовами.
- вы можете дать обещание имя (семантика функции)
- Обещание, естественно встроенный механизм обработки ошибок (Reject)
- Обещание не должно быть вложенным (поток управления)
const, пусть VS var
var предназначен для глобального использования, а let находится в пределах области действия функции. const предназначен для неизменности. Если говорить о преимуществах неизменяемости, это будет долгая история, поэтому я просто придерживаюсь вывода: избегайте var, используйте const и let.
Продолжение следует…
Я также хочу добавить обработку ошибок и части Tests(Mocha/Chai) в следующих статьях, пока что все!