fs.writeFile(fullPath, base64Image, { encoding: 'base64' }, err => {
if (err) return res.status(500).send(`Ошибка сохранения файла: ${err}`)
else return
});
const promise = new Promise(resolve, reject)=>{
fs.writeFile(fullPath, base64Image, { encoding: 'base64' }, err => {
if (!err) return resolve(true);
res.status(500).send(`Ошибка сохранения файла: ${err}`)
return reject(false);
});
});
const isWrite = await promise;
if(!isWrite) return;
function saveFileSync(path, data){
let list = path.split(/[\\\/]/);
let filename = list.pop();
let filepath = list.join('/');
fs.mkdirSync(filepath, { recursive: true }, (err) => {
if (err) throw err;
});
fs.writeFileSync(path, data);
}
let date = new Date();
let filename = SSN + '_' + date.getFullYear() + '/' + date.getMonth() + '/' + date.getDay() + '_' + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds() + '.txt';
let text = ecg.join('');
try{
saveFileSync(filename, text);
} catch (e) {
console.log(e);
}
const Authorized = require('../moduls/authorized')
const auth = new Authorized();
// так
router.get("path/",auth.isAuthorized.bind(auth));
// или так
router.get("path/",(...a)=>auth.isAuthorized(...a));
isAuthorized(){
return (req, res, next)=>{
console.log('isAuth',this)
// тут код мидлвара
}
}
router.get("path/",auth.isAuthorized());
// или
router.post("path/",auth.isAuthorized());
// или
router.use(auth.isAuthorized());
const express = require('express'),
app = express(),
port = 3000,
clientSessions = require('client-sessions');
app.use(clientSessions({
secret: '0GBlJZ9EKBt2Zbi2flRPvztczCewBxXK', // set this to a long random string!
cookieName: 'ss', // cookie name dictates the key name added to the request object
requestKey: 'session', // requestKey overrides cookieName for the key name added to the request object.
}));
app.get('/',(request,response,next) => {
request.session.username = 'qwer';
response.send("вы обратились к /");
});
app.get('/1',(request,response,next) => {
console.log(request.session.username);
response.send("вы обратились к /1<br>в сессии сохранено: "+JSON.stringify(request.session));
});
app.listen(port,(err) => {
if(err){
return console.log(err);
}
console.log(`Слушается порт ${port}`);
});
// так как name.names(...) асинхронный, то для того, чтобы получить
// результат запроса в "синхронном стиле" используем await
// await можно использовать только внутри асинхронной функции.
// для этой цели обернем блок с вызовами name.names(...) в
// само вызывающуюся асинхронную функцию
(async () => {
var n = await name.names('text', { data });
console.log(n);
})()
var request = require("request");
// создаем класс для кэширования результатов запросов
class СacheRequest {
// конструктор
constructor(handler){
// создаем ассоциативный массив для кэширования результата
this.cache = {};
}
// основной метод класса, предназначен для получения данных по ссылке
// принимает url в качестве параметра
// возвращает выполненный промис если запрос есть в кэше
// или промис в ожидании выполнения запроса
async get(url){
// если такой запрос уже был, возвращаем промис с результатом из кэша
if( this.cache[url] )
return Promise.resolve(this.cache[url]);
// иначе возвращаем промис с ожиданием результата
return new Promise((resolve,reject)=>{
// делаем запрос на указаный url
request(url, (error, response, body)=>{
// если ошибка - реджектим )
if( error )
return reject(error);
// иначе запоминаем в кэше ответ
this.cache[url] = body;
// и резолвим body
resolve(body);
});
});
}
// метод отчищает кэш
clear(){
this.cache = {};
}
}
// создаем экземпляр кэша
const cacheRequest = new СacheRequest();
// так как request асинхронный, то для того, чтобы получить
// результат запроса в "синхронном стиле" используем await
// await можно использовать только внутри асинхронной функции.
// для этой цели обернем блок с вызовами cacheRequest.get в
// само вызывающуюся асинхронную функцию
(async () => {
// выполняем запросы:
// запросим "http://google.ru/" (будет сделан фактический запрос)
let body = await cacheRequest.get("http://google.ru/");
console.log("\n\n\nBODY:", body, 111);
// еще раз запросим "http://google.ru/" (будет взято из кэша)
body = await cacheRequest.get("http://google.ru/");
console.log("\n\n\nBODY:", body, 222);
})()
// раз в сутки отчищаем кэш
setTimeout(()=>{
cacheRequest.clear();
}, 1000*60*60*24 ); // 1000*60*60*24 это количество миллисекунд в сутках
Как быть в случае, если путь до файла должен быть динамическим, например, по дням недели?
// роутер Express-а ./routes/files
var fs = require('fs');
var express = require('express');
var router = express.Router();
// получаем файлы
var multer = require('multer');
var upload = multer({
dest:'./folder_for_upload_files/'
// прочие опции
}).single("upload");
router.post('/files/upload', function(req, res, next) {
upload(req, res, function (err) {
if (err){
// обработка ошибки
// и завершение обработки запроса res.end() или res.send(...)
return;
}
// если же загрузка произошла успешно, то
// 1. определяем в какую папку и под каким именем переместить файл
// 2. перемещаем файл в нужную папку
// 3. делаем об этом запись в БД или в файлики или кудато еще (в место предназначенное для хранения этой информации)
// 4. завершаем обработки запроса ( res.end() или res.send(...) )
// в помощь:
// req.file.originalname - оригинальное имя файла на компе клиента
// req.file.filename - имя загруженного в "./folder_for_upload_files/" файла
});
});
module.exports = router;
// внутри async function
let quiz = global_quizzes[quiz_id];
if(!quiz) {
global_quizzes[quiz_id] = quiz = Chat_Quizzes.findById(quiz_id).exec();
}
if( quiz instanceof Promise ){
global_quizzes[quiz_id] = quiz = await quiz;
}
chat.quiz = quiz;
var all_mail;
mailModel.find().exec((err, docs) =>{
// данный код не будет выполнен сразу, он будет выполнен только через какоето время.
// дело в том, что пока бд сделает выборку и отдаст результат
// может пройти определенное время. Чтобы избежать простоев,
// в данном случае метод exec выполняется асинхронно
// то есть тело данной функции будет вызвано не ранее чем от БД будут получены данные
// а js тем временем продолжит выполнение кода дальше
all_mail = docs;
});
// и придет сюда. но так как docs от БД еще не получен, all_mail все еще равен undefined.
console.log(all_mail); // Ошибка
// добро пожаловать в асинхронность
var all_mail;
mailModel.find().exec((err, docs) =>{
// в all_mail засовываем промис(обещание) того, что в скором времени будет результат
all_mail = new Promise((resolve, reject)=>{
resolve(docs);
});
});
all_mail.then((data)=>{
// когда же результат будет получен, обрабатываем его
console.log(data); // все ок)
});
Use HTML5 websockets using the Node Streams API.
Usage
This module works in Node or in Browsers that support WebSockets. You can use browserify to package this module for browser use.
var options = {
url: url,
encoding: null,
timeout: 60*1000
};
function req(opts, cb){
var isTimeout = false;
setTimeout( ()=>{
if( isTimeout) return;
isTimeout = true;
cb("time is out", {});
}, opts.timeout);
request.get(opts, function (err, res) {
// сюда не попадает уже.. ;) виснет на запросе.
if( isTimeout ) return;
isTimeout = true;
cb(err, res);
});
)
// выполняем запрос с таймаутом в 60 сек.
req(options, function(err, res){
if (err) {
console.log('не ok');
} else {
console.log('ok');
}
});