Я немного не понимаю как Node js, функцию сделать асинхронной?
const asyncFn = () => new Promise((resolve, reject) => {
// do some async call and resolve or reject
});
const delay = duration => new Promise(res => setTimeout(res, duration));
delay(200).then(() => {
// do something after delay
});
const asyncFn = async () => {
// do something with awaiting async call result or not
// and return result or not
});
const getSomeData = async () => {
const result = await someAsyncCall();
return someOtherAsyncCall(result);
};
const asyncFn = cb => {
// do some async call and call cb
}
const delay = (duration, cb) => setTimeout(cb, duration));
delay(200, () => {
// do something after delay
});
как определить функция которую вызываю она синхронная или асинхронная ?
Просто я думаю если выполнить npm старт и скопировать build.js который вернется в index.html и запустить это в том же nginx с переадресацией маршрутов в index.html - то не получится то, что я планирую?
npm i -S express
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;
app.use('public', express.static('public'));
app.get('*', (req, res) => {
res.sendFile('public/index.html');
});
app.listen(port, () => {
console.log('Server listen at %s port', port);
});
app.use('public', express.static('public'));
подключается промежуточное ПО express.static, которое будет перехватывать все запросы за статическими файлами по пути: hostname:port/public/*
, например http://localhost:3000/public/style.css
, забирать их из папки /public
и возвращать клиенту. Я правильно понимаю, что бекенд разработчики на Node.JS:
1. Принимают запрос.
2. Обрабатывают, валидируют.
3. Манипулируют с базами данных.
4. И ответным запросом отправляют результат.
<script>window.__INITIAL_STATE__ = json.stringify(initialState);</ script>
export = function (initialState: {} = {}) {
if (__CLIENT__) {
initialState = JSON.parse(JSON.stringify(window.__INITIAL_STATE__));
}
return createStore(combineReducers({ ...rootReducer }), initialState, enhancer);
}
app.use((req, res, next) => {
console.log('Time: ', Date.now());
next();
});
app.use(express.static(__dirname + '/public'));
app.get("/about", (req, res) => { /* */}); // ( 1 )
app.get("/home", (req, res) => { /* */}); // ( 2 )
app.get("*", (req, res) => { /* */}); // ( 3 )
app.get("/never", (req, res) => { /* */}); // ( 4 )
GET https://site/public/img/1.png
GET https://site/home
GET https://site/feed
GET https://site/never
Time: <текущее время>
export function loginProtect(data) {
return new Promise((resolve, reject) => {
// ищем в базе совпадения по имейлу
UserModel.findOne({ user_email: data.user_email }, function (err, user) {
if (err) return reject(err);
// далее если совпадение нашлось сверяешь хэш пароль с тем что был прислан в функцию
bcrypt.compare(data.user_password, user.user_password, function (err, res) {
if (err) return reject(err);
// res это результат работы, возвращает true или false
return resolve(res);
});
});
});
}
app.post('/api/login', (req, res) => {
const user = {
user_data: req.query
}
// отправляем данные в контроллер
UserController.loginProtect(req.query).then(result => {
// handle success
jwt.sign({ user: user.user_data }, process.env.SECRET_FOR_JWT, (err, token) => {
res.json({
success: true,
token
});
});
}).catch(err => {
// handle error
});
});
function getSome() {
return new Promise((resolve, reject) => {
request('https://site.ru', function (err, res, body) {
if (err) {
reject(err);
return;
}
resolve(body);
});
});
}
getSome().then(res => {
// do something with res
}).catch(err => {
// handle error
});
async foo() => {
const some = await getSome();
// use some
}
const rp = require('request-promise');
const getSome = async () => {
try {
const body = await rp({ uri: 'https://site.ru', json: true });
// do something other
return body;
} catch (err) {
// handle error
return err;
}
}
getSome().then(res => {
// do something with res
}).catch(err => {
// handle error
});
async foo() => {
const some = await getSome();
// use some
}