Вопросы с тегами [express]

-1

голосов
0

ответ
24

Просмотры

Как использовать _lodash в nodejs API службы

Я пытаюсь использовать службу _lodash.groupBy в nodejs API службы. Я построил свой апи после этого урока: nodejs-MongoDB-апи. Затем я сделал свой собственный API для списков. Я пытаюсь использовать _lodash группировать некоторые данные прежде чем отправить его обратно к переднему концу, но я получаю сообщение об ошибке UnhandledPromiseRejectionWarning. Вот как у меня есть мои настройки API: roster.controller.js: Const экспресс = требуется ( «экспресс»); Const маршрутизатор = express.Router (); Const rosterService = требуется ( './ roster.service'); router.get ( '/ getRoster', getRoster); module.exports = маршрутизатор; Функция getRoster (REQ, разреш, netxt) {rosterService.getRoster () .then (реестры => res.json (списки)) .catch (ERR => следующая (ERR)); } roster.service.js: Const = конфигурации требуется ( 'config.json'); Const = JWT требуется ( 'jsonwebtoken'); Const Bcrypt = требуется ( 'bcryptjs'); Const дБ = требуется ( '_ хелперы / дб'); Const Учетный = db.Roster; Уст _ = требуется ( 'lodash / ядро'); module.exports = {getRoster}; Функция асинхронной getRoster () {вернуть _.groupBy ([6.1, 4.2, 6.3], Math.floor); } Roster.model.js Const мангуст = требуется ( 'мангусты'); Схема Const = mongoose.Schema; Const = схема новой схемы ({RAWDATA: {Тип: String}}); schema.set ( 'toJSON', {виртуалов: истинные}); _helpers / db.js Const = конфигурации требуется ( 'config.json'); Const мангуст = требуется ( 'мангусты'); mongoose.connect (process.env.MONGODB_URI || config.connectionString, {useCreateIndex: истинно, useNewUrlParser: истинный}); mongoose.Promise = global.Promise; module.exports = {Состав: требуется ( '../ списки / roster.model')}; module.exports = mongoose.model ( 'Учетный', схема); держать его просто, потому что теперь я просто используя пример предоставленный _lodash. Тем не менее, я получаю ошибку обещания. Я довольно новыми для работы с обещаниями и ответов, так что извините, если это очевидный вопрос. Вот ошибка я получаю от моего апи сервера: Сервер прослушивает порт 4000 (узел: 13273) UnhandledPromiseRejectionWarning: ReferenceError: рядом не определена rosterService.getRoster.then.catch.err (/ Users / Treetop / DEV / dutyoff / API / списки / rosters.controller.js: 43: 23) process.internalTickCallback (внутренний / процесс / next_tick.js: 77: 7) (узел: 13273) UnhandledPromiseRejectionWarning: Необработанные обещают отторжение. Эта ошибка возникла либо бросал внутри функции асинхронной без улова блока, или отвергая обещание, которое не было обработано с .catch (). (Отказ ID: 2) (узел: 13273) [DEP0018] DeprecationWarning: Необработанные обещают отказы являются устаревшими. В будущем обещают отбраковки, которые не обрабатываются прервет процесс Node.js с кодом ненулевым. Я также попытался поставить метод .groupBy в функции getRoster () без каких-либо удачи. Любая помощь, пытаясь получить эту работу была бы оценена.
DasPete
1

голосов
2

ответ
1.5k

Просмотры

Не удается PUT ошибки в Node Экспресс приложении

Мой и опубликовать API, работает, но по какой-то причине моего app.put нет. Когда я ударил локальный: 3001 / контакты / 1 как PUT в Почтальон, я даже не вижу мой простой console.log: app.put ( '/ API / контакты: ИД', (REQ, Рез) => {консоли .log ( 'req.params.id', req.params.id); res.json (контакт);}); app.put app.put ( '/ API / контакты: идентификатор', (REQ, разреш) => {console.log ( 'req.params.id', req.params.id); res.json (контакт); }); Полный код server.js // Требуется ////////////////////////////////////////// ////////////////////////// Const = выразить требуется ( 'экспресс'); Const приложение = экспресс (); Const bodyParser = требуется ( 'тело-анализатор'); // req.body константные CORS = требуется ( 'CORS'); Const R = требуется ( 'ramda'); // Переменные /////////////////////////////////////////////// //////////////////// Const имя хоста = 'локальный'; Const порт = 3001; пусть контакты = требуется ( './ данные'); // Логика /////////////////////////////////////////////// //////////////////////// app.use (bodyParser.urlencoded ({расширен: истинно})); app.use (CORS ()); app.get ( '/ API / контакты', (REQ, разрешение) => {если (контакты || R.isEmpty (контакты)) returnError (Рез, 'Не найдены!'); res.json (контакты); }); app.get ( '/ API / контакты /: ИД', (REQ, разреш) => {Const контакт = contacts.filter (контакт => contact.id == req.params.id); если (R.isEmpty ( контакт)) returnError (Рез, 'нет контакта не найдено'); res.json (R.head (контакт));}); app.post ( '/ API / контакты', (REQ, разреш) => {Const контакт = {ID: contacts.length + 1, first_name: req.body.first_name, last_name: req.body.last_name, электронная почта: req.body.email, сайт: req.body.website} contacts.push (контакт); res.json (контакт); }); app.put ( '/ API / контакты: ID', (REQ, Рез) => {console.log ( 'req.params.id', req.params.id); // сопзЬ контакт = contacts.filter (контакт => {// возвращение contact.id == req.params.id //}) [0]; // console.log ( '1 контакт', контакт); // Const индекс = contacts.indexOf (контакт); // константные ключи = Object.keys (req.body); // keys.forEach (ключ => {// контакт [ключ] = req.body [ключ]; //}); // console.log (» 2 контакта», контакт); // контакты [индекс] = контакт; // console.log ( '' контакты, контакты); // res.json (контакты [индекс]); res.json (контакт);}) ; Const returnError = (резисторный, MSG) => res.status (404) .json ({сообщение: MSG}); app.listen (порт, имя хоста () => {console.log ( `сервер работает по адресу: // $ {имя хоста}: $ {порт}`);});
Leon Gaban
0

голосов
0

ответ
18

Просмотры

Express/MySQL not returning same value returned by MySQL Workbench

I have a query that is perfectly working when I run it on MySQL Workbench, but when I run it on Express it is returning me all the data on my database. Please help fix? PS. posted this before but didn't get fixed. --Client $.ajax({ url: '/filter', type: 'get', contentType: 'application', data: { categoryIDs : checkedCategory, materialIDs : checkedMaterial, designIDs : checkedDesign}, success: function(response) { console.log(response.products); } }); --Server code getFilteredTable: function(req, res, next) { var filter="SELECT COUNT(A.id) \ FROM tbl_product A JOIN tbl_product_details B ON A.id = B.prod_id \ JOIN tbl_category C ON A.id = C.prod_id \ JOIN tbl_material D ON A.id = D.prod_id \ JOIN tbl_design E ON A.id = E.prod_id \ WHERE C.category_id IN (?) \ AND (D.material_id IN (?) \ OR E.design_id IN (?))"; mysqlConnection.query(filter, [req.query.categoryIDs, req.query.materialIDs, req.query.designIDs], function(err, rows, fields) { if(!err) res.send({products : rows}); else console.log(err); }); }, This is my query: SELECT COUNT(A.id) FROM tbl_product A JOIN tbl_product_details B ON A.id = B.prod_id JOIN tbl_category C ON A.id = C.prod_id JOIN tbl_material D ON A.id = D.prod_id JOIN tbl_design E ON A.id = E.prod_id WHERE C.category_id IN (6) AND (D.material_id IN (15) OR E.design_id IN (39)); I expect the output to be (workbench result): COUNT(A.id): 42 instead, it's giving me: COUNT(A.id): 1582
Matthew
1

голосов
3

ответ
621

Просмотры

Get response status code in a middleware

Я строй приложения, в котором я пытаюсь построить свою собственную систему регистрации для каждого запроса. Для каждого запроса, я хотел бы войти в метку времени, используемый метод, маршрут, и, наконец, код ответа, который был отправлен клиенту. У меня есть следующий код на данный момент: // index.js Const экспресс = требуется ( «экспресс»); Const bodyParser = требуется ( 'тело-анализатор'); константные CORS = требуется ( 'CORS'); Const приложение = экспресс (); app.use (bodyParser.json ()); app.use (CORS ()); app.use (требуется ( './ Lib / протоколирования')); app.get ( '/', (REQ, Рез, следующая) => {res.send ( 'Hello World!');}); app.listen (3001); // ./lib/logging.js константный момент = требуется ( 'момент'); Const мел = требуется ( 'мел'); Const лог = console.log; module.exports = (REQ, Рез, следующая) => {давайте теперь = `[$ {chalk.green (момент (). Формат ( 'HH: мм: сс'))}] `; пусть метод = chalk.magenta (req.method); пусть маршрут = chalk.blue (req.url); пусть код = chalk.yellow (res.statusCode); // Всегда 200 журнала ( `$ {Теперь} $ {метод} полученный запрос на $ {маршрут} $ {код}`); следующий(); } К сожалению, даже если я res.status (201) Пошли ( «привет мир») Он всегда будет ловить код статуса 200 ... Есть ли способ, чтобы поймать какой-либо ответ исходящую клиента и принести его код статуса?
nook
1

голосов
1

ответ
45

Просмотры

Разница между LocalStorage и сессии [закрыт]

Я создал аутентификацию пользователя с паспортной локальной стратегией, и я использую сессию. Каждый раз, когда пользователь вошел в сессии хранится в базе данных и в браузере. В моем веб-интерфейсе можно использовать user.id, чтобы сохранить его в локальном хранилище в качестве ключа или маркер?
Sadiq Mustapha Aji
1

голосов
1

ответ
81

Просмотры

Как развернуть expressjs статических шаблонов для AWS без перезагрузки сервера?

У меня есть сервер express.js сервера, который я разворачивать к AWS упругой Beanstalk. Я использую Рули двигатель для шаблонов. Шаблоны структура меняется чаще, чем код сервера, поэтому я хочу, чтобы иметь быстрый способ развертывания их. Я экспериментировал с хостинг шаблонов на отдельном S3 статического ведра, а затем загружать их из nodejs кода. Таким образом, я могу развернуть изменения в шаблоны очень быстро с помощью S3 статического развертывания и не Eb развернуть, что перезапускает все узлы сервера. Вот мой node.js код сервера для шаблона загрузки: Const s3 = новый aws.S3 (); s3.getObject ({Ковш: 'bucketname.com', ключ: 'вид /' + путь}, (ERR, данные) => {Const шаблон = handlebars.compile (data.Body.toString ( 'UTF-8') ); разрешить (шаблон);}); Это решило проблему шаблона скорости развертывания, но я не уверен, если он не вносит дополнительные потери производительности. Я думал, так как S3 и эластичная Beanstalk являются амазонки услуги воздействие должно быть минимальным, но сайт тесты заставляют меня думать иначе. Может быть, есть лучший способ решить проблему скорости развертывания шаблонов?
brisky
1

голосов
1

ответ
112

Просмотры

Не могу требовать визуализатора в протоколе HTTP в электроном

Может кто-нибудь объяснить мне, почему этот код не работает? Я пытался требовать визуализатор в протоколе файла (без явного статического сервера), и это было хорошо, но когда я сделать это с помощью протокола HTTP я получил неперехваченным Ошибка: Не удается найти модуль «./renderer»! Есть ли способ, чтобы требовать пользовательских модулей HTTP? Спасибо ... Структура - проект + node_modules - app.js - index.html - package.json - renderer.js app.js сопз {приложение, BrowserWindow} = требуется ( 'электрон'); Const = выразить требуется ( 'экспресс'); Const = путь требует ( 'путь'); Const URL = требуется ( 'URL'); Сервер = Const экспресс (); server.use (express.static (__ имя_директории)); app.on ( 'готов', () => server.listen (3000, CreateWindow)); Функция CreateWindow () {пусть выиграть = новый BrowserWindow ({ширина: 800, высота: 600}); win.loadURL (URL. Формат ({протокол: 'HTTP', имя хоста: 'локальный', порт: 3000})); win.webContents.openDevTools (); win.on ( 'закрытые', функция () {выиграть = NULL; app.quit ();}); } Index.html Тест требует ( './ рендерер'); renderer.js вар корень = document.getElementById ( 'корень'); root.innerHTML = 'Hello, World!'; Электронная версия: 1.7.10 Операционная система: Windows 10
Sadra Samadi
1

голосов
1

ответ
51

Просмотры

экспресс JS рендеринга без замены HTML-тегов (например, )

Я работаю на блог, как проект, и мне нужно, чтобы сделать текст без замены HTML-тегов. ./app.js //app.js ... вар текст = app.get 'Hello World' ( '/', (REQ, Рез) => {res.render ( 'индекс', {текст: текст}) ;}); ... ./views/index.jade //-index.jade р = текст Когда я сделать это: Вот что я получаю: Hello <б> World </ b> Вот что я ищу Привет Мир
Otabek Keldiyorov
1

голосов
1

ответ
794

Просмотры

Корень маршрута Не Перенаправление Экспресс

Моя проблема связана вокруг строго «/» маршрут. Я думаю, что это называется корневым маршрут. Когда пользователь подключается к моему месту, я проверяю, если есть данные сессии по указанному пользователю, что он / она не всегда должен повторно войти, когда браузер закрывается. Если нет данных сессии на пользователя, то мой сайт будет перенаправлен на SIGNUP маршрутизатора. Давайте представим, что мой сайт www.example.com. Если я иду в www.example.com/buy и у меня нет никаких данных о сессии пользователя, сайт автоматически перенаправляет на www.example.com/signup, как ожидалось. То же самое произойдет, если я напечатал в www.example.com/sell и данные сессии не существует. Но если я напечатал только www.example.com и там до сих пор нет данных сессии, URL-адрес не попадет на www.example.com/signup. Почему это «специальное» лечение корневого маршрута, и как я могу сделать это следовать тем же поведение, как и другие маршруты? Фрагмент кода из моих server.js, что я думаю, что имеет отношение к этому вопросу: app.get ( '/ сессии', (REQ, Рез) => {res.send (req.session.auth);}) .get ( '/ Регистрация», (REQ, Рез) => {если (req.session.auth!) {res.sendFile (path.join (__ имя_директории 'клиент / открытый / index.html'));} еще {возвращение res.redirect ( '/');}}) .get ( '*', (REQ, разреш) => {если (req.session.auth) {res.sendFile (path.join (__ имя_директории, «клиент / открытый / индекс. HTML '));} еще {возвращение res.redirect (' / регистрация ');}}); полная страница server.js сопзИте выразить = требуется ( 'экспресс'), приложение = экспресс (), bodyParser = требуется ( 'тело-анализатор'), путь = требуется ( 'путь'), initDatabase = требуется (»./ дБ / DBCONFIG '), порт = process.env. PORT || 9000, Io = требуется ( '') Socket.io слушать (app.listen (порт, () => {initDatabase (); console.log ( 'Успешно подключено к порту', порт);}))., Сессия = требуют ( 'экспресс-сеанс'), MySQLStore = требуется ( 'экспресс-MySQL-сессии') (сеанс), sessionStore = новый MySQLStore ({хост:. (требуется»./ actualKeys') хост, порт: 3306, пользователь: требовать (»./ actualKeys ') имя пользователя, пароль.. требуется (' ./ actualKeys ') пароль базы данных:. требуется (' ./ actualKeys') базы данных, checkExpirationInterval: 60000, г. 43200000}), пользователи = {}, номер = {}; // Экспресс app.use (express.static ( 'клиент / сборки')) .use (bodyParser.urlencoded ({продлен: правда,})) .use (bodyParser.json ()) .use (сессия ({секрет: требовать (»./ actualKeys'). sessionCode, магазин: sessionStore, пересохраните: ложь, saveUninitialized: истинно,})); требуется ( './ сервер / маршрутизаторы / маршрутизатор') (приложение); app.get ( '/ сессии', (REQ, Рез) => {res.send (req.session.auth);})! .get ( '/ регистрация', (REQ, Рез) => {если (REQ .session.auth) {res.sendFile (path.join (__ имя_директории 'клиент / открытый / index.html'));} еще {возвращение res.redirect ( '/');}}) .get ( '*' (REQ, Рез) => {если (req.session.auth) {res.sendFile (path.join (__ имя_директории 'клиент / открытый / index.html'));} еще {возвращение res.redirect ( '/ Подписаться'); } }); Спасибо {Если (! Req.session.auth) {res.sendFile (path.join (__ имя_директории 'клиент / открытый / index.html')); } Еще {возвращение res.redirect ( '/'); }}) .Get ( '*', (REQ, разреш) => {если (req.session.auth) {res.sendFile (path.join (__ имя_директории, 'клиент / открытый / index.html'));} еще {вернуть res.redirect ( '/ регистрации');}}); Спасибо {Если (! Req.session.auth) {res.sendFile (path.join (__ имя_директории 'клиент / открытый / index.html')); } Еще {возвращение res.redirect ( '/'); }}) .Get ( '*', (REQ, разреш) => {если (req.session.auth) {res.sendFile (path.join (__ имя_директории, 'клиент / открытый / index.html'));} еще {вернуть res.redirect ( '/ регистрации');}}); Спасибо
Programmer wannabe
1

голосов
1

ответ
39

Просмотры

Express OAuth Authorization for Different Access Methods

Я ищу, чтобы выяснить, лучшие практики по следующему сценарию. Я относительно новый / хобби программист. Я разрабатываю чат-бот, который использует Dialogflow. Я хочу, чтобы пользователи могли использовать различные приложения обмена сообщений, чтобы иметь возможность получить доступ к данным и информации в резервной базе данных, но я хочу, чтобы пользователи для аутентификации (мне нужно знать, кто они есть для того, чтобы запросить соответствующие данные). У меня также есть веб-сайт, где пользователи могут создать учетную запись и войти в систему. Я создал веб-сайт и все соединения OAuth работает нормально. Я храню информацию о создании учетной записи, чтобы следить за пользователями. Там, где я застрял, что я хочу, чтобы иметь возможность проверять подлинность пользователей о платформ обмена сообщениями для связи с их счетов в моей базе данных (маркер / какой-то простой идентификатор профиля). Я ищу советы по потоку OAuth и маршрутизации. Я использую Express. Давайте использовать Google связывании аккаунта в качестве примера: Один из способов создания / счет доступа: Веб-сайт -> SignUp / Войти -> Отправлять в Google -> Подтвердить идентичность -> Возврат к Callback (в пределах защищенной зоны веб-сайта). Другой способ доступа к учетной записи: DialogFlow Chat -> Отправить webhook (Я хочу, чтобы этот маршрут защищенного) -> Аутентифицировать / Распознать пользователь -> Запрос данные -> Возврат информации на устройство пользователя. Этот процесс требует доступа к тому же потоку, как процесс веб-сайта. Поскольку у меня есть сейчас, мой обратный вызов всегда ссылается на внутреннюю страницу моего веб-сайта. Но я бы предположить, что я не хочу, что если пользователь пытается получить доступ к информации с помощью помощника Google. Это лучше / лучшие практики в: Обрабатывать различные потоки через маршрут условных операторов? Настройка различных конечных точек маршрута, используя ту же логику учетной записи (я использую passport.js), но указать разные адреса обратного вызова? Регистрация разных учетных данных API с различным URLs для обработки различных методов доступа? Как вы справляетесь обратные вызовы, поступающие изнутри приложения для обмена сообщениями? В моем новичке я, я более усложняя ли это есть более простое и более элегантное решение? Спасибо!
Mike Nelson
1

голосов
0

ответ
784

Просмотры

Генерация Swagger документации для существующего сервера NodeJS

Я пытаюсь документировать свой API с помощью Swagger, но если я документацию самостоятельно и вручную, я потратил много времени, а потом я увидел этот вопрос на SO, и последний ответ о экспресс-OAS -порожденная, что, кажется, чтобы быть хорошим инструментом. Сформирована своя документация с успехом, но POST не сделала мою Payload документации, и без этого, некоторый разработчик мог подумать, что мой посту не нужен полезный груз, чтобы отправить все, что я сделал, следуя документации, сделал некоторые испытания с помощью цифрового API и вызывать методы с помощью почтальона. Экспресс-OAS-генератор, генерирует документацию, но без полезной нагрузки в методе POST. Кто-то уже пройти через это?
Lucas_Santos
1

голосов
1

ответ
68

Просмотры

Изменено MessageClass непрочитанного элемента почты в папке «Непрочитанные» не может быть сохранено без ошибок

У меня есть собственный внешний вид 2013+ надстройка с помощью Add-In Express, с помощью кнопки на главной ленте, которая при нажатии меняет класс сообщений выбранного почтового отправления (среди других на самом деле-полезных операций). Это прекрасно работает во всех ситуациях, потому что если выбранная папка в Outlook, это папка Непрочитанного исключения. При сохранении MailItem с обновленным MessageClass для непрочитанных элементов в этой папке я получаю сообщение об ошибке: Операция не может быть выполнена, так как сообщение было изменено. Это также происходит, если элемент становится автоматически считывается с помощью настройки панели чтения, но если сообщение вручную помечены как прочитанные до нажатия кнопки. Это не происходит, если другие менее фундаментальные свойства (как субъект) почтовое отправление будут изменены таким же образом. Следующий пример иллюстрирует проблему (Bounds проверка / обработку исключений для краткости опущена): общественного недействительный ChangeSelectedMailItemMessageClass () {вар activeExplorer = _outlookApp.ActiveExplorer (); Выбор вар = activeExplorer.Selection; Пункт вар = Выбор [1] в качестве MailItem; item.MessageClass = "Some.Valid.Message.Class"; item.Save (); // "Операция не может быть выполнена, так как сообщение было изменено. Plugin.Marshal.ReleaseComObject (пункт); Plugin.Marshal.ReleaseComObject (выбор); Plugin.Marshal.ReleaseComObject (activeExplorer); } Такое же поведение можно увидеть пытается установить пользовательские свойства пользовательских элементов в поисковой папке, критерии ссылки, что пользователь собственности, поэтому я подозревал, что это связано с папки поиска, а не папку непрочитанной почты специально. Отпускание ссылки отбора и activeExplorer до внесения поправок в MailItem нет никакой разницы, и срок службы MailItem от чтения внести поправки настолько мал, что это может быть сделано (с учетом приведенных выше фрагмент кода). Может быть уместна информация: прогноз 2016, хотя дублированные на 2013 Использование надстроек Express, хотя подозрительные объекты не связаны COM выпускается как можно скорее, насколько я могу сказать, Outlook, подключается к Exchange Online против автономный режим не имеет никакого значения, ошибка та же Эти сообщения в моем почтовом ящике или какой-то вложенной, никакие другие почтовые ящики, связанные с Outlook, в то время, пока можно ли внести изменения в MessageClass непрочитанного элемента из папки непрочитанной почты, не встречая ошибку? Edit: Представляется, что другая установленная надстройка мешает каким-то образом в этом процессе, но это
Pablissimo
1

голосов
0

ответ
188

Просмотры

Какие Google OAuth варианты использовать для экспресс-API и реагировать приложение

Я был в кругах на это в течение нескольких часов и прочитать десятки блогов, статей, как-тос, поэтому вопросы и документации. То, что я пытаюсь сделать: У меня есть приложение, которое реагирует разговаривает с узлом / экспресс-API. Я хотел бы для проверки подлинности запросов на определенные маршруты, используя только Google OAuth. Я также хотел бы сохраняться логином в течение 30 дней (по крайней мере, насколько пользователь знает, - очевидно, может быть освежающим по пути) Я не использую какие-либо услуги Google, помимо информации о личности. Области применения являются электронная почта и профиль. Я хотел бы записать, какие пользователи войти в экземпляре MongoDB Вот что работает: Шаг 1: Обратитесь пользователя Google из приложения на этапе авторизации 2: Google ссылается к применению с авторизации Шаг 3: приложение отправляет id_token бакэнду API Шаг 4 : API просит Google, чтобы проверить id_token и это делает, возвращая данные успешно Все это описано здесь Google и работает отлично до этого момента. У меня есть достаточно информации в этот момент, чтобы бросить вместе некоторое промежуточное программное обеспечение для проверки подлинности маршрутов. Это та точка, где путаница наступает. Id_token истекает через 60 минут, и нет маркера обновления в ответе. ОК, так что я кое-что почитать, и я нахожу объяснения, как этот. Это говорит, что я должен быть запрашивающий доступ в автономном режиме вместо этого, получить код, отправив код бакэнду и позволяя бэкэнд поговорить с Google, чтобы получить как id_token и refresh_token, как указано на Google здесь. Хорошо, я могу это сделать, и я получаю это каждый раз: { «Ошибка»: «unsupported_grant_type», «error_description»: «Invalid grant_type:»} Помимо этого сообщения об ошибке будучи ужасно бесполезным, Я сравниваю мой запрос с OAuth потока детской площадки в Google и мой запрос выглядит их просьбе, но с моей конфигурации заменить их. Примечание: Я использую почтальон, чтобы попробовать это. Вопросы: Для этого случая использования, какая из этих моделей имеет смысл использовать? Предполагая, что код, я затем хранить код в куки и отправить с каждым запросом? Существует MongoDB используется по API - Если я использую код подход ли мне просто нужно сохранить код и токен обновления, чтобы сохранить этот действителен в течение 30 дней? Могу ли я сделать все это, не нарушая принципов REST? Как решить недопустимый grant_type: ошибка? EDIT Я решил ошибку grant_type поэтому я изменил текст выше соответственно. Для этого случая использования, какая из этих моделей имеет смысл использовать? Предполагая, что код, я затем хранить код в куки и отправить с каждым запросом? Существует MongoDB используется по API - Если я использую код подход ли мне просто нужно сохранить код и токен обновления, чтобы сохранить этот действителен в течение 30 дней? Могу ли я сделать все это, не нарушая принципов REST? Как решить недопустимый grant_type: ошибка? EDIT Я решил ошибку grant_type поэтому я изменил текст выше соответственно. Для этого случая использования, какая из этих моделей имеет смысл использовать? Предполагая, что код, я затем хранить код в куки и отправить с каждым запросом? Существует MongoDB используется по API - Если я использую код подход ли мне просто нужно сохранить код и токен обновления, чтобы сохранить этот действителен в течение 30 дней? Могу ли я сделать все это, не нарушая принципов REST? Как решить недопустимый grant_type: ошибка? EDIT Я решил ошибку grant_type поэтому я изменил текст выше соответственно. я затем хранить код в куки и отправить с каждым запросом? Существует MongoDB используется по API - Если я использую код подход ли мне просто нужно сохранить код и токен обновления, чтобы сохранить этот действителен в течение 30 дней? Могу ли я сделать все это, не нарушая принципов REST? Как решить недопустимый grant_type: ошибка? EDIT Я решил ошибку grant_type поэтому я изменил текст выше соответственно. я затем хранить код в куки и отправить с каждым запросом? Существует MongoDB используется по API - Если я использую код подход ли мне просто нужно сохранить код и токен обновления, чтобы сохранить этот действителен в течение 30 дней? Могу ли я сделать все это, не нарушая принципов REST? Как решить недопустимый grant_type: ошибка? EDIT Я решил ошибку grant_type поэтому я изменил текст выше соответственно.
red6
1

голосов
1

ответ
91

Просмотры

TypeError: Не удается прочитать свойство «текст» неопределенных

router.post ( '/ addtodo', (REQ, Рез, следующий) => {пусть Todo = новый Todos ({текст: req.body.text, дата: новая Дата ()}); Todos.addTodo (TODO, (ERR, Todos, следующий) => {если (ERR) бросок ERR; res.json (Todos);});}); Я пытаюсь сохранить документ в схеме Todo с использованием вышеуказанного метода схемы и методы являются константный todoSchema = mongoose.Schema ({текст: {Тип: String}, дата: {Тип: Дата, по умолчанию: Date.now} }); Const Тодос = module.exports = mongoose.model ( 'Todos', todoSchema); // Получаем документы module.exports.getTodos = (обратный вызов) => {Todos.find (обратный вызов); }; // Добавить документ module.exports.addTodo = (TODO, обратный вызов) => {Todos.create (TODO, обратный вызов); }; Но когда я пытаюсь POST объекта JSON с помощью почтальона он показывает эту ошибку. TypeError: Не удается прочитать свойство «текст»
1

голосов
0

ответ
15

Просмотры

How to stop express from incorrectly interpreting path inside of static index.htm file

Я тестирую экспресс, и я наткнулся на проблему, что я не нашел хорошее решение для. Мои относительные пути внутри index.htm будут путаться по маршруту. Внутри server.js я включил следующий основной маршрут. server.js app.get ( '/', функция (запрос, ответ) {response.sendFile (path.join (__ имя_директории, 'открытый / index.htm'));}); Папка / общественность содержит мой файл index.htm. Папка / открытый / изображения содержит один файл .png, используемый для тестирования. Внутри index.htm я включаю следующую строку кода. index.htm На стандартном веб-сайте эта простая структура каталогов работает отлично. Когда index.htm визуализируется это выглядит один каталог до / изображения, чтобы найти testImage.png. Однако, когда я называю его с экспресс-маршрут он запутается и не может найти изображение. В моем браузере, когда я посещаю HTTP: // локальный: 3000 / маршрут правильно находит index.htm внутри папки. К сожалению, это делает ссылку на изображение сломано, и это дает мне эту ошибку. GET HTTP: // локальный: 3000 / изображения / testImage.png 404 (не найдено), я могу решить эту проблему, в том числе и эту строку кода в server.js. Это говорит экспресс, что звонки / изображения должны фактически пойти в общественные / изображения. app.use ( '/' изображения, express.static (path.join (__ Dirname, 'общественные / изображений'))); Но идти вперед, что линия делает вещи более запутанной и может привести к другим проблемам. Есть ли стандартная практика для решения такого рода проблем? Спасибо! PNG 404 (не найдено), я могу решить эту проблему, в том числе и эту строку кода в server.js. Это говорит экспресс, что звонки / изображения должны фактически пойти в общественные / изображения. app.use ( '/' изображения, express.static (path.join (__ Dirname, 'общественные / изображений'))); Но идти вперед, что линия делает вещи более запутанной и может привести к другим проблемам. Есть ли стандартная практика для решения такого рода проблем? Спасибо! PNG 404 (не найдено), я могу решить эту проблему, в том числе и эту строку кода в server.js. Это говорит экспресс, что звонки / изображения должны фактически пойти в общественные / изображения. app.use ( '/' изображения, express.static (path.join (__ Dirname, 'общественные / изображений'))); Но идти вперед, что линия делает вещи более запутанной и может привести к другим проблемам. Есть ли стандартная практика для решения такого рода проблем? Спасибо!
DR01D
1

голосов
1

ответ
38

Просмотры

jsonschema-master to validate json request not responding as expected

I am trying to use jsonschema-master to validate a json request entered via a POST request using express. See the code and sample below. It picks up if the attribute labels are missing or spelt wrong, such as “model”, “areas”, “id” but isn’t picking up if the values of those attributes meet the specifications. For example the “model” attribute is defined as an enumerated type either “premium” or “basic”, but I seem to be able to put any old string in there and it plows on regardless, also the coordinates are defined as type number, but again it ignores this and the error then gets passed the validator and causes problems further on. Not sure what I'm missing. node.js code: var Validator = require('jsonschema-master').Validator; var v = new Validator(); var bodySchema = { "model": { "enum": [ "premium","basic" ] }, "areas": { "type":"array", "items": { "id": {"type": "string"}, "geometry": { "type": { "type":"string"}, "coordinates": { "type":"array", "items": { "type":"array", "items": [ {"type":"number"}, {"type":"number"}, {"type":"number"} ] } }, "required" : ["type","coordinates"] }, "required" : ["id","geometry"] } }, "required" : ["model","areas"] }; var valResult = v.validate(doc.request, bodySchema); if (valResult.errors.length) { // Validation failed. // All processing will now stop. console.log('Request invalid: '+ doc._id +" - "+valResult.errors); } SAMPLE CORRECT JSON request (in doc.request) { "model": "premium", "areas": [ { "id": "1234", "geometry": { "type": "Polygon", "coordinates": [ [ [ 453600.0, 181100.0, 0 ], [ 453600.0, 181200.0, 0 ], [ 453700.0, 181200.0, 0 ], [ 453700.0, 181100.0, 0 ], [ 453600.0, 181100.0, 0 ] ] ] } } ] }
Caroline Keay
1

голосов
1

ответ
494

Просмотры

Debug Экспресс код приложения расслоения плотной Visual Studio:

Я пытаюсь отлаживать выразить Js через приложение Visual Studio код вот мой launch.json { «версия»: «0.2.0», «конфигурация»: [{ «тип»: «узел», «запрос»: «приложить »,„имя“:„Закрепить“,„порт“: 9229}],„соединение“: []} И мое приложение работает в порту 3000, но когда я запускаю отладчик я получил следующую отладку ошибок с унаследованным протоколом, потому что узел. JS версия не может быть определена (Ошибка: подключение ECONNREFUSED 127.0.0.1:9229)
iam batman
1

голосов
2

ответ
308

Просмотры

Node.js / Экспресс-магазин DB конфигурация для различных сред в формате JSON

Я бегу NodeJS Экспресс приложение, в настоящее время уже Dev окр, тест окр, и прод окр. Однако параметры подключения к БД в коде, есть безопасный и лучшая практика способ хранения БД конфигурации и все другие конфиги в формате файла JSON, объявив их в модуле (отдельно для каждого окр или все в одном модуле для экспорта , может быть, есть default.JSON, Dev.JSON, Prod.JSON ... и т.д.) для каждой среды, то требуется их соответствующим образом, установив правильную конфигурацию для правильной среды в app.js. Я хотел бы, чтобы достичь этой цели без зависимости от любого 3-го пакета партии, как .env или NCOF.
phpguy
1

голосов
1

ответ
193

Просмотры

Восстановление пароля запрос маркера GET не работает

Const = expressValidator требуется ( 'экспресс-валидатор'); Const вспышка = требуется ( 'соединение-вспышка'); Const сессия = требуется ( 'экспресс-сессии'); Const = паспортные требуется ( 'паспорт'); Const LocalStrategy = требуется ( «паспорт местного») стратегии. Const мангуст = требуется ( 'мангусты'); константное фс = требуется ( «фс»); вар приложение = экспресс (); // Порт сервера Const порт = process.env.PORT || 3000; // Сервер начиная сообщение app.listen (порт, () => {console.log ( `Сервер на порт $ {порт}`);}); // Views каталог создан и handbars двигатель hbs.registerPartials (__ Dirname + '/ просмотров / макеты') app.set ( 'вид двигателя', 'HBS'); // статические средства визуализации app.use (express.static (__ имя_директории + '/ общественное')); app.use ( '/ пользователей', express.static (__ имя_директории + '/ общественное')); приложение. использовать ( '/', панель express.static (__ имя_директории + '/ общественность')); // тело-анализатор промежуточного app.use (bodyParser.urlencoded ({продлен ложь})) app.use (bodyParser.json ()) app.use (cookieParser ()); // expressSession app.use (сессия ({секрет: 'секрет', saveUninitialized: правда, пересохраните: истинный})); // паспорт app.use (passport.initialize ()); app.use (passport.session ()); '': // expressValidator app.use (expressValidator ({errorFormatter функция (пары, тзд, значение) {вар пространство имена = param.split (), корень = namespace.shift (), formParam = корень, в то время (namespace.length ) {formParam + = '[' + namespace.shift () + ']';} возвращение {параметр: formParam, MSG: MSG, значение: значение};}})); // Подключение флэш-app.use (вспышка ()); // Global Варс app.use (функция (Req, Рез, следующая) {res.locals.success_msg = req.flash ( 'success_msg'); res.locals.error_msg = req.flash ( 'error_msg'); res.locals.error = req.flash ( 'ошибка'); res.locals.user = req.user || ноль; следующий(); }); // server.log установки промежуточного app.use ((REQ, Рез, следующая) => {вар Теперь = новая дата () ToString (); вар лог = `$ {сейчас}: $ {. Req.method} $ { req.url} `console.log (журнал); fs.appendFile ( 'server.log', журнал + \ п ', (ERR) => {если (ERR) {console.log (' Невозможно добавить к серверу .log ');}}); следующая ();}); // Маршруты константные маршруты = требуется (»./ маршруты / маршрутов); константные пользователей = требуется (»./ маршруты / пользователей); Const панели = требуется ( './ маршруты / приборная панель'); app.use ( "/"), маршруты; app.use ( "/ пользователи", пользователи); app.use ( "/ панель", приборная панель); // Получаем год для колонтитула hbs.registerHelper ( 'getCurrentYear', () => {вернуть новый Date () getFullYear ().}); - Оригинальный вопрос я пытаюсь реализовать функции сброса пароля в моем приложении с помощью следующего учебника я сделал несколько настроек, чтобы удовлетворить свои потребности и маршруты, которые я хочу, но на данный момент я получаю следующее - Вот моя текущая файловая структура и вот мой текущий код user.js модель Const экспресс = требуется ( «экспресс»); Const мангуст = требуется ( 'мангусты'); Const Bcrypt = требуется ( 'bcryptjs'); вар приложение = экспресс (); если (app.get ( 'окр') === 'производства') {mongoose.connect (process.env.DATABASE_URL, {useMongoClient: истинно}); } Еще {mongoose.connect ( 'MongoDB: // локальный / POL-развитие', {useMongoClient: истинный}); } Вар дБ = mongoose.connection; дб. на ( 'ошибка', console.error.bind (консоль, 'Ошибка соединения:')); db.once ( 'открытый', функция () {console.log ( "Соединение было установлено");}); вар UserSchema = mongoose.Schema ({schoolName: String, schoolAddress: String, schoolAddress2: String, город: String, ZipCode: String, addressCheck: Boolean, PostalAddress: String, postalCity: String, postalZipCode: String, телефон: Number, факс: Номер, адрес электронной почты: {Тип: String, требуется: правда, уникальный: истинный}, пароль: String, schoolType: String, schoolDistrict: String, schoolRegion: String, учебные программы: String, participationBefore: Boolean, participationYears: Number, directorName: String, directorTelephone: Number, directorEmail: String, directorAttendanceRehersal: Boolean, directorAttendanceEvent: Boolean, schoolLiaisonName: String, schoolLiaisonTelephone: Number, schoolLiaisonEmail: String, schoolLiaisonPosition: String, schoolLiaisonOtherPosition: String, schoolLiaisonTShirt: String, schoolLiaisonTutorMentor: String, attendanceRehersal: Boolean, attendanceEvent: Boolean, админ: Boolean}); UserSchema.pre ( 'сохранить', функция (следующий) {вар пользователь = это; вар SALT_FACTOR = 5;! Если (user.isModified ( 'пароль')) вернуться в следующем (); bcrypt.genSalt (SALT_FACTOR, функция (эээ, соль) {если (ERR) вернуться в следующем (ERR); bcrypt.hash (user.password, соль, нуль, функция (ERR, хэш) {если (ERR) возвращает следующий (ERR); user.password = хэш; следующим ( );});});}); Пользователь вар = module.exports = mongoose.model ( 'Пользователь', UserSchema); module.exports.createUser = функция (NEWUSER, обратный вызов) {bcrypt.genSalt (10, Функция (ERR, соль) {bcrypt.hash (newUser.password, соль, функция (ERR, хэш) {newUser.password = хэш; newUser.save (обратный вызов);}); }); } Module.exports.getUserByEmail = функция (электронная почта, обратный вызов) {вар запроса = {адрес электронной почты: адрес электронной почты}; User.findOne (запрос, вызов); } Module.exports.getUserById = функция (ID, обратный вызов) {User.findById (ID, обратный вызов); } Module.exports.comparePassword = функция (candidatePassword, хэш, обратный вызов) {bcrypt.compare (candidatePassword, хэш-функция (ERR, isMatch) {если (ERR) бросок ERR; обратный вызов (нуль, isMatch);}); } Users.js маршруты Const выразить = требуется ( 'экспресс'); Const маршрутизатор = express.Router (); Const = паспортные требуется ( 'паспорт'); Const nodemailer = требуется ( 'nodemailer'); константное RANDOMBYTES = требуется ( 'RANDOMBYTES'); Const = требуют асинхронного ( «» асинхр ); Const LocalStrategy = требуется ( «паспорт местного») стратегии. вар User = требуется ( '../ модели / пользователь'); // Регистрация: получить router.get ( '/ регистр', (REQ, Рез) => {res.render ( 'register.hbs', {PAGETITLE: 'Регистрация'});}); // Регистрация: запись router.post ( '/ регистре', (REQ, разреш) => {вар schoolName = req.body.schoolName; вар schoolAddress = req.body.schoolAddress; вар schoolAddress2 = req.body.schoolAddress2; вар город = req.body.city; вар ZipCode = req.body.zipCode; вар PostalAddress = req.body.postalAddress; вар postalCity = req.body.postalCity; вар postalZipCode = req.body.postalZipCode; вар телефон = req.body .telephone; вар электронная почта = req.body.email; вар пароль = req.body.password; вар schoolType = req.body.schoolType; вар schoolDistrict = req.body.schoolDistrict; вар schoolRegion = req.body.schoolRegion; вар учебный план = req.body.curriculum; вар directorName = req.body.directorName; вар directorTelephone = req.body.directorTelephone; вар directorEmail = req.body.directorEmail; вар schoolLiaisonName = req.body.schoolLiaisonName; вар schoolLiaisonTelephone = req.body.schoolLiaisonTelephone; вар schoolLiaisonEmail = req.body.schoolLiaisonEmail; вар schoolLiaisonPosition = req.body.schoolLiaisonPosition; вар schoolLiaisonTShirt = req.body.schoolLiaisonTShirt; вар schoolLiaisonTutorMentor = req.body.schoolLiaisonTutorMentor; // валидация req.checkBody ( 'schoolName', 'Название школы требуется') notEmpty (). req.checkBody ( 'schoolAddress', 'Адрес школы требуется') notEmpty (). req.checkBody ( «город», «Город требуется»). не пустой(); req.checkBody ( 'ZipCode', 'Этот почтовый код требуется') notEmpty (). req.checkBody ( 'телефон', 'Номер телефона требуется') notEmpty (). req.checkBody ( 'электронная почта', 'учетная запись электронной почты требуется') notEmpty (). req.checkBody ( «электронная почта», «Эта учетная запись электронной почты не действителен») isEmail (). req.checkBody ( 'пароль', 'пароль учетной записи требуется') notEmpty (). req.checkBody ( 'schoolType', 'Требуется тип школы') notEmpty (). req.checkBody ( 'schoolDistrict', 'Школьный округ требуется') notEmpty (). req.checkBody ( 'schoolRegion', 'Регион школы требуется') notEmpty (). req.checkBody ( 'учебный план', 'Учебный план требуется') notEmpty (). req.checkBody ( 'directorName', ' Имя директора требуется ') notEmpty (). req.checkBody ( 'directorTelephone', 'A директоры телефона не требуется') notEmpty (). req.checkBody ( 'directorEmail', 'A директора электронной почты требуется') notEmpty (). req.checkBody ( 'directorEmail', 'Этот адрес электронной почты не действителен') isEmail (). req.checkBody ( 'schoolLiaisonName', 'Школа представитель имя требуется') notEmpty (). req.checkBody ( 'schoolLiaisonTelephone', 'Школа представитель телефон требуется') notEmpty (). req.checkBody ( 'schoolLiaisonEmail', 'Школа представитель электронной почты не действителен') isEmail (). req.checkBody ( 'schoolLiaisonEmail', 'Школа представитель электронной почты требуется') notEmpty (). req.checkBody ( 'schoolLiaisonPosition', ' Школа представитель позиции требуется ') notEmpty (). req.checkBody ( «schoolLiaisonTShirt», «Школа представитель размера футболки требуется») notEmpty (). req.checkBody ( 'schoolLiaisonTutorMentor', 'Школа представитель Репетитор / наставника требуется') notEmpty (). вар ошибки = req.validationErrors (); если (ошибки) {res.render ( 'Register', {ошибок: ошибки}); } Еще {вар NEWUSER = новый пользователь ({schoolName: schoolName, schoolAddress: schoolAddress, schoolAddress2: schoolAddress2, город: город, почтовый индекс: ZipCode, PostalAddress: PostalAddress, postalCity: postalCity, postalZipCode: postalZipCode, телефон: телефон, электронная почта: электронная почта, пароль: пароль, schoolType: schoolType, schoolDistrict: schoolDistrict, schoolRegion: schoolRegion, учебный план: учебный план, directorName: directorName, directorTelephone: directorTelephone, directorEmail: directorEmail, schoolLiaisonName: schoolLiaisonName, schoolLiaisonTelephone: schoolLiaisonTelephone, schoolLiaisonEmail: schoolLiaisonEmail, schoolLiaisonPosition: schoolLiaisonPosition, schoolLiaisonTShirt: schoolLiaisonTShirt, schoolLiaisonTutorMentor: schoolLiaisonTutorMentor,}); User.createUser (NEWUSER, функция (ERR, пользователь) {если (ERR) бросок ERR; console.log (пользователь);}); req.flash ( «success_msg», «Теперь вы зарегистрированы, вы можете войти!»); res.redirect ( '/ пользователей / Войти'); }}); passport.use (новый LocalStrategy ({usernameField: 'электронная почта'}, функция (электронная почта, пароль, сделано) {User. getUserByEmail (электронная почта, функция (эээ, пользователь) {если (ERR) бросить эээ, если (пользователь) {возвращение сделано (нуль, ложь, {сообщения: 'Неизвестный адрес электронной почты'});} User.comparePassword (пароль, пользователь .password, функция (эээ, ismatch) {если (ERR) бросок эээ, если (ismatch) {возвращение сделано (нуль, пользователь);} еще {возвращение сделано (нуль, ложь, {сообщений: 'Неверный пароль'}); }});}); })); passport.serializeUser (функция (пользователь, сделано) {сделано (нуль, user.id);}); passport.deserializeUser (функция (ID, сделано) {User.getUserById (ID, функция (ERR, пользователь) {сделано (ERR, пользователь);});}); // Логин: получить router.get ( '/ Войти', (REQ, Рез) => {res.render ( 'login.hbs', {PAGETITLE: 'Войти'});}); // Логин: после router.post ( '/ Войти', паспорт. аутентификации ( 'местный', {successRedirect: '/ панель', failureRedirect: '/ Users / имя пользователя', successFlash: 'Добро пожаловать!', failureFlash: 'Неверный адрес электронной почты или пароль'}), функция (Req, Рез) {/ / res.redirect ( '/' + req.user.username); res.redirect ( '/'); }); // Сброс пароля: получить router.get ( '/ сброс-пароль', функция (Req, Рез) {res.render ( 'сброс-пароль', {PAGETITLE: 'Сброс пароля', пользователя: req.user}); }); // Сброс Password: router.post ( '/ сброс-пароль', функция (REQ, Res, следующий) {async.waterfall ([функция (сделано) {RANDOMBYTES (20, функция (ERR, ЬиЙ) {вар маркер = buf.toString ( 'шестигранной'); сделано (эээ, маркер);});}, функция (маркер, сделано) {User.findOne ({электронная почта: req.body.email}, Функция (эээ, пользователь) {если (! пользователь) {req.flash ( 'ошибка', 'Нет учетной записи с этим адресом электронной почты существует.'); вернуться res.redirect ( '/ сброс-пароль'); } User.resetPasswordToken = маркер; user.resetPasswordExpires = Date.now () + 3600000; // 1 час user.save (функция (ERR) {сделано (ERR, маркер, пользователь);}); }); }, Функция (маркер, пользователь сделал) {nodemailer.createTestAccount ((эээ, счета) => {// создать многоразовый объект транспортера с помощью SMTP по умолчанию транспорт в случае (process.env.NODE_ENV === 'производства') {Транспортер = nodemailer.createTransport ({хост: "smtp.sendgrid.net", порт: 587, авт: {пользователь: process.env.SENDGRID_USERNAME, проходят: process.env.SENDGRID_PASSWORD,}}); } Еще {Транспортер = nodemailer.createTransport ({хост: "smtp.ethereal.email", порт: 587, авт: {пользователь: '[email protected]', передать: 'A4W9HF2WbhAav263VM',}}); } // Настройка электронной почты данных с помощью Юникода символов пусть mailOptions = {из: 'password.reset' + process.env.GLOBAL_EMAIL || «[email protected]», // адрес отправителя в: user.email, // список субъекта приемниками: «Сброс пароля запрос», // Тема текстовая строка: «Вы получаете это, потому что вы (или кто-то другой ) запросил сброс пароля для учетной записи. \ п \ п «+» Пожалуйста, нажмите на следующую ссылку, или вставьте в адресную строку браузера, чтобы завершить процесс: \ п \ п «+„Http: //“+ req.headers.host +„/ сброс-пароль /“+ маркер +» \ п . \ п»+„Если вы не запрашивали это, пожалуйста, проигнорируйте это письмо и ваш пароль будет оставаться неизменным \ п“// выводит}; // отправить почту с определенного transporter.sendMail транспортного объекта (mailOptions, (ошибка, информация) => {req.flash ( «успех», «Адрес электронной почты было отправлено» + user.email + 'с дальнейшими инструкциями. '); сделано (эээ, 'сделано'); res.redirect (' / пользователи / сброс-пароль ');}); }); }], Функция (ERR) {если (ERR) возвращают следующий (ERR); res.redirect ( '/'); }); }); // Сброс пароля токена ссылку: получить router.get ( '/ сброс-пароль /: лексема», функция (Req, Рез) {User.findOne ({resetPasswordToken: req.params.token, resetPasswordExpires: {$ Gt:! Date.now ()}}, функция (эээ, пользователь) {если (пользователь) { req.flash ( 'ошибка', 'маркер сброса пароля недействителен или истек'), возвращение res.redirect ( '/ пользователи / сброс-пароль');} res.render ( '/', {пользователь: REQ. пользователя});}); }); // Сброс пароля токена: после router.post ( '/ сброс-пароль /: лексемы', функция (Req, Рез, следующий) {async.waterfall ([функция (сделано) {User.findOne ({resetPasswordToken: req.params .token, resetPasswordExpires: {$ Gt: Date.now ()}}, функция (эээ, пользователь) {если (! пользователь) {req.flash ( 'ошибка', 'маркер сброса пароля недействителен или истек') , возвращение res.redirect ( 'назад'); } User.password = req.body.password; user.resetPasswordToken = не определено; user.resetPasswordExpires = не определено; user.save (функция (ERR) {req.logIn (пользователь, функция (ERR) {сделано (ERR, пользователь);});}); }); }, Функция (пользователь, сделали) {nodemailer.createTestAccount ((эээ, счета) => {// создать многоразовый объект транспортера с помощью SMTP по умолчанию транспорт в случае (process.env.NODE_ENV === 'производства') {Транспортер = nodemailer .createTransport ({хост: "smtp.sendgrid.net", порт: 587, авт: {пользователь: process.env.SENDGRID_USERNAME, передать: process.env.SENDGRID_PASSWORD,}});} еще {транспортер = nodemailer. createTransport ({хост: "smtp.ethereal.email", порт: 587, авт: {пользователь: '[email protected]', передать: 'A4W9HF2WbhAav263VM',}}); } // Настройка электронной почты данных с помощью Юникода символов пусть mailOptions = {из: 'password.reset' + process.env.GLOBAL_EMAIL || «[email protected]», // адрес отправителя в: user.email, // список субъекта приемниками: «Ваш пароль был изменен», // Тема текстовая строка: «Привет, \ п \ п» + «Это подтверждение того, что пароль для вашей учетной записи» + user.email + «только что был изменен \ п.» // выводим}; // отправить почту с определенным transporter.sendMail транспортных объектов (mailOptions, (ERR) => {req.flash ( 'успех', 'Успех Ваш пароль был изменен!'.); Done (ERR); }); }); }], Функция (ERR) {res.redirect ( '/'); }); }); // Выход router.get ( '/ выход из системы', функция (Req, Рез) {req.logout (); req.flash ( 'success_msg', 'Вы вышли из!'); Res.redirect ( '/ пользователей /авторизоваться'); }); module.exports = маршрутизатор; нового пароля {{> заголовок}} {{>}} вспышка Сброс пароля Новый пароль Confirm Password Update Пароль {{> колонтитул}} Любая помощь здесь будут оценены. Что здесь ожидается После нажатия на ссылку в письме, маркер получает передается и перенаправить пользователя на страницу нового пароля, так что они могут изменить свой пароль. Не уверен, что еще попробовать здесь.
B.J.B
1

голосов
0

ответ
31

Просмотры

NodeJS storing iterator position over requests

Мы не написали код, который возвращает массив из базы данных и по первому требованию, мы выполняем цикл над ним, пока мы находим переменные. а затем отправить это значение. Однако, если у нас есть второй запрос, что запрос начинается итерация в положении мы оставили предыдущую петлю. result.findAllLights (функция (огни) {console.log ( "получил обратный вызов"); вар посыла = ложь; удаление lightId; console.log ( "PRE-LOOP =" + JSON.stringify (огни)); для (вар lightId подсветка) {console.log ( "проверка" + lightId), и это приводит к проверке 0 light.column = 0 и строка = 0 и 1 и 1 проверки 1 light.column = 0 и строка = 1 и 1 и 1 2 проверки light.column = 0 и строка = 2 и 1 и 1 проверка 3 light.column = 0 и строка = 3 и 1 и 1: 4 проверка света.
noahp78
1

голосов
0

ответ
33

Просмотры

Creating use with passport while logged in with passport

I am trying to have it so a user can login and then create clients (another sub user) with passport. I have the main user accounts working but I can not get the client accounts to work. I need the sessions to be set to false, I tried the same code before I put that in and it failed on the serialize user part of passport. It is saving the client user data to the database but it crashing the server. Please ask if you have questions or I need to add something to thew post. This is the error message I get when I go to sign them up: ERROR MESSAGE _http_outgoing.js:356 throw new Error('Can\'t set headers after they are sent.'); ^ Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11) at ServerResponse.header (/home/ubuntu/workspace/asset-management/node_modules/express/lib/response.js:767:10) at ServerResponse.send (/home/ubuntu/workspace/asset-management/node_modules/express/lib/response.js:170:12) at done (/home/ubuntu/workspace/asset-management/node_modules/express/lib/response.js:1004:10) at /home/ubuntu/workspace/asset-management/node_modules/swig/lib/swig.js:565:9 at /home/ubuntu/workspace/asset-management/node_modules/swig/lib/swig.js:690:9 at tryToString (fs.js:456:3) at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:443:12) MY ROUTE app.post('/dashboard/client/new', setRedirect({auth: '/client/dashboard', success: '/dashboard/client/new', failure: '/dashboard/client/new'}), isAuthenticated, registrations.postClientSignup); postClientSignup exports.postClientSignup = function(req, res, next){ req.assert('email', 'Please sign up with a valid email.').isEmail(); req.assert('password', 'Password must be at least 6 characters long').len(6); var errors = req.validationErrors(); if (errors) { req.flash('errors', errors); req.flash('form', { email: req.body.email }); return res.redirect('/signup'); } // calls next middleware to authenticate with passport passport.authenticate('clientSignup', { session: false, successRedirect: '/dashboard/client/new', // Select redirect for post signup failureRedirect: '/dashboard/client/new', failureFlash : true })(req, res, next); next(); }; PASSPORT CODE passport.use('clientSignup', new LocalStrategy({ usernameField: 'email', passReqToCallback : true }, function(req, email, password, done) { var findOrCreateUser = function(){ Client.findOne({ email: req.body.email }, function(err, existingUser) { if(err){ console.log(err); } if (existingUser) { req.flash('form', { email: req.body.email }); return done(null, false, req.flash('error', 'An account with that email address already exists.')); } // edit this portion to accept other properties when creating a user. var user = new Client({ email: req.body.email, password: req.body.password, // user schema pre save task hashes this password bizID: req.body.bizID, role: req.body.role }); console.log(req.body.email); console.log(req.body.password); user.save(function(err) { if (err) return done(err, false, req.flash('error', 'Error saving user.')); var time = 14 * 24 * 3600000; req.session.cookie.maxAge = time; //2 weeks req.session.cookie.expires = new Date(Date.now() + time); req.session.touch(); return done(null, user, req.flash('success', 'A verification email has been sent to ' + user.email + '.')); }); }); }; process.nextTick(findOrCreateUser); }) ALSO IN PASSPORT passport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); });
Kirbytech
1

голосов
0

ответ
139

Просмотры

Node.js большой файл возобновляемая загрузки ускорить

Я пытаюсь создать сервер, который может обрабатывать большие (100M-1T) загрузки файлов на максимальной скорости. Таким образом, я делаю следующие шаги: На стороне клиента (браузера) Я разделить исходный файл на 3 части и начать загружать все части параллельно. Если же часть поданной для загрузки из-за проблемы в сеть, то я проверить размер куска, который уже парциальный записывается на диск на сервере и реагировать на клиент, что потребность сервера кусок от й -> конец байтами. И клиент посылает кусок от й байт из части. Затем все части были успешно загружена thnen мне нужно маржа его к одному конечному файлу. Это хороший алгоритм?
Oleksandr Kyrpa
1

голосов
1

ответ
26

Просмотры

ExpressJS несколько маршрутов попадания в то же время

Я настраиваю свои маршруты для expressjs приложения, и я вижу 2 маршрута выполняется, когда я ударил одну конечную точку. Вот мой код: app.get ( "/ забыл-пароль", (REQ, Рез) => {....}); app.get ( "/: ModelName /: идентификатор?", (REQ, разреш) => {....}); Я понимаю, что второй по существу будет ловить все, если первый из них не совпадают. Но я был под впечатлением, что когда-то один маршрут согласован, никаких других не побежал. Правильный вывод показывается в браузере, но я вижу ошибки от второго маршрута показать в моей консоли. Есть ли способ, чтобы предотвратить это, кроме положить некоторый тип префикса второго маршрута? (Что делает его / модель /: ModelName ...)
Leo
1

голосов
1

ответ
36

Просмотры

JQuery Помещенный не работает, но работает с почтальоном

I feel bad junking Stackoverflow with these junky questions, but with hours of looking for examples, I couldn't fix the problem. Here it is. I am trying to PUT with jQuery, my code is this $.ajax ({ type: "PUT", url: "http://localhost:3000/users/5a57adb130cdda747d2c4863", dataType: "json", contentType: "application/json", data: JSON.stringify(data), success: function() { console.log("worked!") } }) The success function is called, but when I GET on postman, my data is not changed. But when I PUT on postman, it works. Postman screenshot Thanks!!! EDIT: With debugging on my route, it seems as though the JS code is not passing the data properly. Route code router.put('/:id', function (req, res) { User.findByIdAndUpdate(req.params.id, req.body, {new: true}, function (err, user) { if (err) return res.status(500).send("There was a problem updating the user."); res.status(200).send(user); console.log("PUT id:" + req.params.id); console.log("PUT body:" + req.body.name); // .name being the data I am passing console.log("PUT user:" + user) }); }); Logging output PUT id:5a57adb130cdda747d2c4863 PUT body:undefined PUT user:{ _id: 5a57adb130cdda747d2c4863, name: 'fsafsafa', ... } PUT id:5a57adb130cdda747d2c4863 PUT body:fsafsafa PUT user:{ _id: 5a57adb130cdda747d2c4863, name: 'fsafsafa', ... }
1

голосов
0

ответ
67

Просмотры

Express server crashes after MongoDB performs an operation

Я кодирование до сервера Node.js с помощью ExpressJS и MongoDB с MongooseJS. У меня есть коллекция, в которой я хочу, чтобы каждый документ, чтобы жить только в течение 24 часов. После этого я хочу DB, чтобы удалить документ. Я использовал два подхода - чистый раствор MongoDB и с использованием пакета НОЙ мангуст-ТТЛИ. Каждый из них работает так же в моем случае - Монго делает запрос, который удаляет слишком старые документы и сразу после этого мои ExpressJS сервера падает с ошибкой: Ошибка: сокет повесил трубку. Код для мангуст-ТТЛ случае: Const = ТТЛ требуется ( «Мангуст-ТТЛ»); Const = weatherMeasurementsSchema схема ({parentRoomId: {Тип: Schema.Types.ObjectId, ссылка: "Номер"}, температура: Количество, влажность: Количество, createdAt: Дата}); weatherMeasurementsSchema.plugin (ТТЛ, {ТТЛ: "1й", интервал: "1й"}); Код для чистого MongoDB случая: дБ. measurements.createIndex ({ «createdAt»: 1}, {expireAfterSeconds: 60}) Для тестирования я установил ТТЛ и интервальных полей всего 1 минуту, так что я могу обобщать ранее. У меня совершенно не знаю, что это неправильно, не что-то с подключением к БД? Для подключения к БД я использую: mongoose.connect ( "MongoDB: //127.0.0.1/wisehome", {useMongoClient: истинный}); EDIT: Я собрал сообщения об ошибках (одинакова для обоих случаев): Ошибка: разъем повесить на createHangUpError (_http_client.js: 253: 15) в Socket.socketOnEnd (_http_client.js: 345: 23) в emitNone (events.js : 91: 20) в Socket.emit (events.js: 185: 7) при endReadableNT (_stream_readable.js: 974: 12) _combinedTickCallback (внутренний / процесс / next_tick.js: 80: 11) в process._tickCallback (внутренний /process/next_tick.js:104:9) 60}) Для тестирования я установил ТТЛ и интервальных полей всего 1 минуту, так что я могу обобщать ранее. У меня совершенно не знаю, что это неправильно, не что-то с подключением к БД? Для подключения к БД я использую: mongoose.connect ( "MongoDB: //127.0.0.1/wisehome", {useMongoClient: истинный}); EDIT: Я собрал сообщения об ошибках (одинакова для обоих случаев): Ошибка: разъем повесить на createHangUpError (_http_client.js: 253: 15) в Socket.socketOnEnd (_http_client.js: 345: 23) в emitNone (events.js : 91: 20) в Socket.emit (events.js: 185: 7) при endReadableNT (_stream_readable.js: 974: 12) _combinedTickCallback (внутренний / процесс / next_tick.js: 80: 11) в process._tickCallback (внутренний /process/next_tick.js:104:9) 60}) Для тестирования я установил ТТЛ и интервальных полей всего 1 минуту, так что я могу обобщать ранее. У меня совершенно не знаю, что это неправильно, не что-то с подключением к БД? Для подключения к БД я использую: mongoose.connect ( "MongoDB: //127.0.0.1/wisehome", {useMongoClient: истинный}); EDIT: Я собрал сообщения об ошибках (одинакова для обоих случаев): Ошибка: разъем повесить на createHangUpError (_http_client.js: 253: 15) в Socket.socketOnEnd (_http_client.js: 345: 23) в emitNone (events.js : 91: 20) в Socket.emit (events.js: 185: 7) при endReadableNT (_stream_readable.js: 974: 12) _combinedTickCallback (внутренний / процесс / next_tick.js: 80: 11) в process._tickCallback (внутренний /process/next_tick.js:104:9) У меня совершенно не знаю, что это неправильно, не что-то с подключением к БД? Для подключения к БД я использую: mongoose.connect ( "MongoDB: //127.0.0.1/wisehome", {useMongoClient: истинный}); EDIT: Я собрал сообщения об ошибках (одинакова для обоих случаев): Ошибка: разъем повесить на createHangUpError (_http_client.js: 253: 15) в Socket.socketOnEnd (_http_client.js: 345: 23) в emitNone (events.js : 91: 20) в Socket.emit (events.js: 185: 7) при endReadableNT (_stream_readable.js: 974: 12) _combinedTickCallback (внутренний / процесс / next_tick.js: 80: 11) в process._tickCallback (внутренний /process/next_tick.js:104:9) У меня совершенно не знаю, что это неправильно, не что-то с подключением к БД? Для подключения к БД я использую: mongoose.connect ( "MongoDB: //127.0.0.1/wisehome", {useMongoClient: истинный}); EDIT: Я собрал сообщения об ошибках (одинакова для обоих случаев): Ошибка: разъем повесить на createHangUpError (_http_client.js: 253: 15) в Socket.socketOnEnd (_http_client.js: 345: 23) в emitNone (events.js : 91: 20) в Socket.emit (events.js: 185: 7) при endReadableNT (_stream_readable.js: 974: 12) _combinedTickCallback (внутренний / процесс / next_tick.js: 80: 11) в process._tickCallback (внутренний /process/next_tick.js:104:9)
Aleksander Sadaj
1

голосов
0

ответ
41

Просмотры

Container accessible with docker run and compose-up, but not with stack deploy

(Извиняюсь, если я смешать все условия, все еще новичок в Докер) У меня есть dockerized Угловое 5 приложение, которое имеет серверный рендеринг с поддержкой, и обслуживается сервером Экспресс на порт 4200 при запуске. Я могу получить доступ к нему на локальном хосте: 4200, когда я запускаю его с любой Docker перспективе -p 4200: 4200 artemzakharov / проба или запустить докер-компоновать до --build в каталог с Докер-compose.yml файл, но когда я пытаюсь запустить его на рое, как это сделано на шаге 3 урока Докера, я уже не могу понять, где он приютил, не говоря уже о подключении к нему. Полагая только локальный в строке URL для Chrome работает для приложения учебник, но не мое, и я не могу понять, что я делаю это по-другому. Если я бег Docker службы пса, я могу видеть все сервисы запущены и работают. Мой Dockerfile: от узла: альпийский RUN MkDir -p / USR / SRC / приложение WORKDIR / USR / SRC / приложение COPY пакет * .json ./ RUN НПМ установки COPY. / USR / SRC / приложение ПОДВЕРГАТЬ 4200 CMD [ «НПМ», «начать»] Мой Докер-compose.yml файла: версия: «3» услуги: веб: # заменяющие имя пользователя / репо: тег с именем и изображения деталей изображения: artemzakharov / проба развертывания: реплики: 5 ресурсов: ограничения: CPUs: "0.1" память: 1024M restart_policy: Состояние: на безотказной порты: - "4200: 4200" сети: - Webnet сеть: Webnet: Как выглядит приложение, когда сломанная, против загружается должным образом Обновление: Я обнаружил, что я не могу подключиться, когда он работает в режиме отдельного либо. Похоже, это, вероятно, часть этого вопроса. / RUN НПМ установки COPY. / USR / SRC / приложение ПОДВЕРГАТЬ 4200 CMD [ «НПМ», «начать»] Мой Докер-compose.yml файла: версия: «3» услуги: веб: # заменяющие имя пользователя / репо: тег с именем и изображения деталей изображения: artemzakharov / проба развертывания: реплики: 5 ресурсов: ограничения: CPUs: "0.1" память: 1024M restart_policy: Состояние: на безотказной порты: - "4200: 4200" сети: - Webnet сеть: Webnet: Как выглядит приложение, когда сломанная, против загружается должным образом Обновление: Я обнаружил, что я не могу подключиться, когда он работает в режиме отдельного либо. Похоже, это, вероятно, часть этого вопроса. / RUN НПМ установки COPY. / USR / SRC / приложение ПОДВЕРГАТЬ 4200 CMD [ «НПМ», «начать»] Мой Докер-compose.yml файла: версия: «3» услуги: веб: # заменяющие имя пользователя / репо: тег с именем и изображения деталей изображения: artemzakharov / проба развертывания: реплики: 5 ресурсов: ограничения: CPUs: "0.1" память: 1024M restart_policy: Состояние: на безотказной порты: - "4200: 4200" сети: - Webnet сеть: Webnet: Как выглядит приложение, когда сломанная, против загружается должным образом Обновление: Я обнаружил, что я не могу подключиться, когда он работает в режиме отдельного либо. Похоже, это, вероятно, часть этого вопроса. услуги: веб: # заменить имя пользователя / репо: тег с именем и изображения деталями изображения: artemzakharov / пробой развёртывания: реплики: 5 ресурсов: ограничения: CPU: «0,1» память: 1024M restart_policy: Состояние: на безотказной порты: - " 4200: 4200" сети: - Webnet сеть: Webnet: Как выглядит приложение при разбивании, против загружается должным образом Обновление: Я обнаружил, что я не могу подключиться, когда он работает в режиме отдельного либо. Похоже, это, вероятно, часть этого вопроса. услуги: веб: # заменить имя пользователя / репо: тег с именем и изображения деталями изображения: artemzakharov / пробой развёртывания: реплики: 5 ресурсов: ограничения: CPU: «0,1» память: 1024M restart_policy: Состояние: на безотказной порты: - " 4200: 4200" сети: - Webnet сеть: Webnet: Как выглядит приложение при разбивании, против загружается должным образом Обновление: Я обнаружил, что я не могу подключиться, когда он работает в режиме отдельного либо. Похоже, это, вероятно, часть этого вопроса. по-отказ порта: - «4200: 4200» сети: - Webnet сеть: Webnet: Как выглядит приложение при разбивании, против загружается должным образом Обновление: Я обнаружил, что я не могу подключиться, когда он работает в режиме отдельного либо , Похоже, это, вероятно, часть этого вопроса. по-отказ порта: - «4200: 4200» сети: - Webnet сеть: Webnet: Как выглядит приложение при разбивании, против загружается должным образом Обновление: Я обнаружил, что я не могу подключиться, когда он работает в режиме отдельного либо , Похоже, это, вероятно, часть этого вопроса.
Artem Zakharov
1

голосов
1

ответ
67

Просмотры

Может app.render () делает массив взглядов?

Это, кажется, не быть задокументированы, мне было интересно, если это возможно, чтобы сделать несколько представлений или массив взглядов в Expressjs как так: Const данных = «некоторых данных, передаваемых по БД»; Const приложение = экспресс (); Const arrayViews = [ 'расположение', 'электронная почта', 'паутина']; app.render (arrayViews, данные (эээ, HTML) => {если (ERR) бросить эээ;}), или я должен сделать это в нескольких экземплярах app.render ( 'электронная почта', данные (эээ, HTML) => {если (ERR) бросить ERR;}) app.render ( 'паутина', данные (ERR, HTML) => {если (ERR) бросить ERR;})
carkod
1

голосов
1

ответ
219

Просмотры

Multer пытается создать новую папку, когда один уже существует

Я использую Multer управлять загрузкой изображений, и при запуске моего приложения на моей локальной машине все работает отлично. Но теперь, когда я пытаюсь развернуть на Heroku, я получаю эту ошибку в моих журналах применения: Необработанное отказ Ошибка: EROFS: только для чтения файловой системы, MkDir «/ общественность» ... который, кажется, как он пытается создать каталог, а чем при использовании существующего (как это делает на моей локальной машине) Это мой код, я использую для Multer: вар хранения = multer.diskStorage ({назначения: (REQ, файл, Cb) => {Cb (нуль, 'общественность / IMG /')}, имя файла: (REQ, файл центибар) => {центибар (нуль, новый Date () toISOString () + file.originalname)}}) загружать вар = multer ({хранения:. хранения }) router.post ( '/: PropertyID', upload.single ( 'IMG'), функция (REQ, разреш) {Property.update ({IMG: req.file. имя_файла}, {где: {ID: req.params.propertyid,}.}), а затем (updatedProperty => {res.redirect ( '/ администратор /' + updatedProperty)})}); Общественный / IMG уже существует, и при тестировании, он прекрасно работает с правильными именами файлов и в конечном итоге в правильном месте. Любая помощь приветствуется! Спасибо!
Emily Grace Acres
1

голосов
0

ответ
264

Просмотры

Как использовать WebPack создать передний конец и администратор?

Я на самом деле новый на Node.js. Я пытаюсь создать приложение с правами администратора и интерфейс, используя Webpack и экспресс. Я создал пример приложения, но теперь проблема в том, как я могу создать приложение с администратором. Ниже я разделил мой WebPack конфигурационного файла уаг Webpack = требуется ( «Webpack»); вар путь = требуется ( «путь»); module.exports = {запись: {интерфейс: './src/index', бэкенд: './admin/index'}, модуль: {погрузчики: [{тест: /\.js?$/, погрузчик: «Бабель 'исключить: / node_modules /}, {тест: /\.css$/, заправку: [ 'стиль sourceMap',' CSS модули и importLoaders = 1 & localIdentName = [путь] ___ [имя] __ [местных] ___ [хэш?: base64: 5] ]}]}, Постановляю: {расширений: [ '', '.js']}, выход: {путь: path.join (__ имя_директории '/ общественность'), publicPath: '/', имя файла:' bundle.js '}, devServer: {contentBase:' ./public», горячий: истинно}, плагинов: [новый webpack.optimize.OccurenceOrderPlugin (), новый webpack.HotModuleReplacementPlugin (), новый webpack.NoErrorsPlugin ()]}; Webpack производства файл конфигурации вар конфигурации = требуется (»./ webpack.config.js'); вар WebPack = требуется ( 'WebPack'); config.plugins.push (новый webpack.DefinePlugin ({ "process.env": { "NODE_ENV": JSON.stringify ( "производство")}})); config.plugins.push (новый webpack.optimize. UglifyJsPlugin ({компрессные: {предупреждение: ложь}})); Есть ли простое решение или то, что я могу сделать сейчас?
Tareq Aziz
1

голосов
0

ответ
102

Просмотры

нечастые 504s на Nginx, когда проксировании к узлу / экспресс-приложение

Мы имеем типичный Nginx + nodejs установки с приложением службы узла v4.2.2 и Nginx v1.9.7.2 Backend работает на экспрессе / nodejs развертывается в кластерном режиме с использованием модуля recluster с дочерними процессами (равный #cores) раздвоенный, что прослушивание же порт. Nginx используется в качестве обратного прокси-сервера для внутреннего интерфейса. Каждый такой случай / коробка (4 ядра 8 ГБ) Nginx + nodejs обслуживает около 100 ТФС при нагрузке с 90-й процентиль задержки около 120 мс. Проблема заключается в том, что мы получаем нечастые (1-2 раза каждые 5 мин) 504s на журнале доступа Nginx и связанный журнал ошибок шоу (110: Тайм-аут соединения) при подключении к входу Как я понимаю, это произойдет, когда Nginx timedout установления соединения с nodejs сервера, но все матрицы показывают nodejs здорово. Кроме того, все запросы ниже и выше этой ошибки имеют нормальное время задержки и только один запрос от застревает. Там нет соответствующей записи в журнал на сервере nodejs означает запрос не достиг сервера узла. Соответствующие Nginx конфигурации ниже. worker_processes авто; worker_rlimit_nofile 40000; события {worker_connections 2000; использовать Epoll; } {HTTP SendFile на; tcp_nopush на; tcp_nodelay на; keepalive_timeout 60; } Перед узлом {Сервер 127.0.0.1:3000; KeepAlive 256; } {Сервер слушать 80; server_name abc.com proxy_set_header X-Real-IP $ remote_addr; proxy_set_header X-Forwarded-за $ proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_read_timeout 60; Местонахождение / {proxy_pass HTTP: // узел; }} Вывод на сс -s является Итого: 747 (ядро 0) TCP: 7400 (Estab 481, закрыто 6890, осиротел 0, synrecv 0, timewait 6890/0), порты 0 Это показывает высокий timewait розетки, но мы не» т увидеть ошибки в системном журнале средство ограничение операционной системы не достигнуты. Я попытался настройки сети и Nginx в первую очередь принимая ключи от блоге не повезло. Нужна помощь в форуме, чтобы получить правильное направление для отладки этого. Дайте мне знать, что больше информации я могу предоставить.
khallas
1

голосов
0

ответ
256

Просмотры

access Node.JS Express static directory from different routes

У меня есть NodeJS с экспресс, и я использую Gulp для создания общей папки приложения является исходным код папки для скриптов и файлов стилей, а расстояние папки для вывода Глотка, который содержит все CSS, JS, EJS файлов моей файловая структуры этого : | -app.js | -server.js | -routes | -loginRoute.js | -appRoute.js | Вид | -loginViews | -login.ejs | -index.ejs | -Общественные | -scripts | -script файлов ... | -Style | -css файлы ... | -dist | -scripts | -script файлы ... | -css | -css файлы ... | -loginViews | -login.ejs | -index.ejs I установить DIST папки как статическая папку, как это: app.use (express.static (path.join (__ Dirname, 'Dist'))); и все виды .ejs подается из DIST папки. Когда я пытаюсь получить доступ к HTTP: // локальный: 8080 / войти в систему Экспресс визуализации login.ejs, что помещенные в папку Dist / входа в систему, и я получил сообщение об ошибке, когда страница пытается загрузить скрипт и CSS файлы, эти файлы не существуют под Http: // Localhost: 8080 / логин / Но, некоей-файла, когда вид обслуживаемые из папки Views, и статической папки, установленной как приложение. использовать (express.static (path.join (__ имя_директории, 'общественность'))); и я пытаюсь получить доступ к HTTP: // локальный: 8080 / Логин, Экспресс визуализации login.ejs, которые размещены в папке Views / входа в систему, браузер, способный загружать CSS и файлы сценариев из статической папки
Netanel Stern
1

голосов
0

ответ
127

Просмотры

Mongoose hangs on find() query

Я занимаюсь разработкой бэкенд для веб-сайта. Основное приложение использует KeystoneJS обеспечить админ интерфейс для тех, кто создает контент, и Keystone работает поверх MongoDB (в частности, мангуст). Содержание подается на основной веб-сайт и мобильное приложение, и таким образом, чтобы обеспечить внутренний сервер API для них я пишу отдельное приложение Express. Сервер бэкенда пытается получить доступ к основной базе данных, используя Монго мангуста. Я называю mongoose.connect (), используя следующую строку соединения и опции: Var db_connection = 'MongoDB: // db_user: db_pass @ LOCALHOST: 27017 / дб'; вар db_options = {autoReconnect: ложные, bufferMaxEntries: 0, PoolSize: 10,}; Соединение успешно открыт, как и протоколируется mongoose.connection.on ( «подключен», ...); и я могу вручную посмотреть на базу данных, используя оболочку MongoDB, чтобы подтвердить, что есть документы в базе данных. Однако, когда я пытаюсь запрос к базе данных, используя: Var события = Event.find (); events.exec ((эээ, события) => {console.log ( '/ API / события: события нашли, посылая клиенту'); если (ERR) res.send (ERR); res.json (события);} ) .catch (ERR => console.log ( 'ошибка:' + ERR)); где событие является keystone.list ( «событие»). модель, зависает запрос и ехес обратного вызова никогда не вызывается, так как журнал консоли никогда не печатается на терминале. Я правильно инициализирован Keystone и импортировать модели, поэтому я не считаю, что проблема с моделью Keystone, но с самым мангустом. Кроме того, если я выполнить приведенный выше код внутри приложения Keystone, он работает успешно, но только не в моем бэкэнде Экспресса приложения.
ianbrault
1

голосов
0

ответ
131

Просмотры

Метод экспресс-валидатор на заказ () не работает. Как отлаживать его?

Я пытаюсь выяснить, почему этот обычай проверка всегда игнорируются. exports.validateData = [// ... Другая встроенная валидация, которые работают ... тело ( 'поле') .custom ((значение) => {console.log ( 'Это сообщение появляется!) вернуться ложным} ) .withMessage ( «Неправильно!»), // ... Другая встроенная валидацию, которые работают ...] Я никогда не получить «Неправильно!» флэш-сообщение. Мои маршруты файл выглядит следующим образом: router.post ( «/ человек / добавить», personController.validateData, asyncHandler (personController.createPerson)) Есть ли у вас какие-либо идеи, почему это происходит? Как я могу отладить ее? Пожалуйста, дайте мне знать, как я могу улучшить мой ответ, чтобы получить вашу помощь. :) К сожалению мой плохой английский. Обновление: Я только что нашел этот вопрос GitHub о точно такой же проблеме в экспрессе-валидатор официальной репо.
Valentín Costa
1

голосов
0

ответ
68

Просмотры

Make a cache system for Express JS app connect with API

[Уровень английский = очень плохо (из Франции ...)] У меня есть простое приложение с Node.js и epress.js Этого использование приложения де модуль «igdb-апи-узел» для соединения с igdb API (https: // www.igdb.com/api) Я использую этот код для получить игру ти ключевого слова: exports.findGameByKeyWord = функция (Req, Рез) {вернуться client.games ({поля: '*', предел: 20, смещение: 0, поиск:. req.params.text}), а затем (igdbResponse => {res.send (igdbResponse.body);}); }; Вся эта работа велика, но сейчас я хотел бы сохранить результат моего запроса в кэше. Я хочу сделать это для скорости до возвращения результата. Я наблюдал Differents идеи сделать это, но это немного сложно для меня, я хотел бы получить Exemple понять. Здесь следы, которые я разведанные: https://github.com/BryanDonovan/node-cache-manager https: //www.npmjs.
Sofiane Hadjadj
1

голосов
1

ответ
964

Просмотры

Передача данных Аудио Blob от React интерфейса к бэкэнду Экспресса

поэтому я бег на вопрос с отправкой аудио (созданное в браузере) на мой бэкэнд будет храниться в базе данных. Я использую Реагировать на переднем конце и с помощью Web Audio API, чтобы позволить пользователю создавать аудио. Когда я посылаю его, бэкенд просто получает пустой объект. Кто-нибудь знает, как я могу получить данные, которые сохраняются, так что он может храниться в базе данных будет играть позже? mediaRecorderOnStop () {console.log ( "данные доступны после MediaRecorder.stop () называется."); Const ClipName = строка ( 'Введите имя для звукового клипа?', 'Мой безымянный клип') // создание нового объекта блоба константным блобы = нового Blob (this.state.chunks, { 'типа': «аудио / OGG; кодеки = Opus'}); // отправка данных в серверной uploadDocumentRequest (this.props.createClip (BLOB, ClipName)) this.setState ({глыбы: console.log []}) ( "записывающее устройство остановлено"); } // делает запрос к апи сообщения сервера функции экспорта uploadDocumentRequest (данные) {axios.post ( '/ API / createAudio', данные) .then (ответ => console.log (uploadSuccess (ответ))) .catch (ошибка => console.log (uploadFail (ошибка))); } Вот изображение моего кода
Sether's
1

голосов
0

ответ
296

Просмотры

Узел-JS - Экспресс и child_process захватывая выход

Мне интересно, если есть способ для меня, чтобы иметь экспресс-запросы сервера Дескриптор процесса child_process. Например, я хочу, чтобы иметь возможность отправить команду, например, cmd.exe, и получить ответ испускать клиент делает запрос. Благодарю. EDIT: Как я пробовал до сих пор есть: нерест child_process через вар прок = мицелия (CONFIG.CMD, config.args, {УХО: config.cwd}); И затем конвейер выхода через: proc.stdout.on ( 'данные', функции (данные) {res.send (данные)}); Однако, это не на самом деле возвращает данные из-за его возвращения команды, которая была послана. Мне было интересно, если есть функция обещания, как:. Proc.stdin.write ( «команда»), то это процесс, который не заканчивается после того, как команда, она будет продолжать работать. Так что я просто не могу ждать, пока все ответы. Благодарю.
Tyler Wilson
1

голосов
1

ответ
805

Просмотры

Как использовать `index.js` в Node.js при создании экспресс-сервис?

Привет Я структурирование моего проекта Node.js на этой основе, например, так: Root index.js названия продукта: (содержит требуюсь для продукта и основного экспорта) productName.js: содержит приложение логики тест test1.js test2.js .. . Теперь у меня есть два вопроса, что логически должно идти в index.js? На данный момент у меня есть это (это было бы хорошим способом делать вещи, и что еще я мог бы включить в index.js?): // index.js вар MYSERVER = требуется (»./ myServer.js'); // «название продукта» = «MYSERVER» module.exports = {пробег: myServer.listen} Имеет ли значение то, что я называю ключ объекта в module.exports (в настоящее время «запустить»)? Почему сервер всегда работает, когда я исполняю index.js с $ узла index.js как он автоматически знать, чтобы запустить myServer.listen? PS: Я знаю веб-структуру инструментов автоматической генерации,
AKMorris
1

голосов
1

ответ
279

Просмотры

Загрузка изображений (Экспресс / Node / MongoDB)

Я ищу наилучший подход к построению функции загрузки для вида веб-галереи приложений. Я нашел несколько подходов от сохранения данных изображения в Монго: https://gist.github.com/aheckmann/2408370, чтобы сохранить их локально на сервере: https://www.terlici.com/2015/05/16/ Выгрузка-файлы-locally.html Я думаю, что нет общего ответа о том, как реализовать эту функциональность. Мой сценарий похож следующий: Я использую MongoDB, NodeJS и экспресс на нем (до сих пор). Один пользователь обрабатывает содержание (создание блога и добавление изображений в галерею). Изображения из несколько килобайта слишком нескольких мб-х лет. Какой самый лучший способ реализовать функциональные возможности для этого USECASE? Вариант № 1: Сохранение данных изображений локально на сервере и их метаданных в MongoDB? Вариант № 2: Хранить данные изображения и метаданные непосредственно в MongoDB? Вариант № 3: Я открыт для любых подсказок и советов! Я новичок в веб-разработки, я признателен за любую помощь, имена пакетов, кодирование парадигмально идея в ... все, что собирается помочь мне написать хороший веб-приложение.
hi im vinzent
1

голосов
1

ответ
276

Просмотры

Экспресс-подключения вспышки отображается только после обновления не на том же page.how, чтобы решить эту проблему?

Ниже зарегистрировать маршрут router.post ( "/ регистрации", функции (REQ, Res) {уаг NEWUSER = новый пользователь ({имя пользователя: req.body.username}); User.register (NEWUSER, req.body.password, функция (ошибка, пользователь) {если (ошибка) {req.flash ( "ошибка", Error.message); возвращение res.render ( "register.ejs");} еще {passport.authenticate ( "локальный") (REQ, Рез, функция () {req.flash ( "успех", "Добро пожаловать в фотодневник" + user.username); res.redirect ( "/ дневник");});}});}); ниже паспортного локального app.use (функция (REQ, Res, следующая) {res.locals.currentUser = req.user; res.locals.error = req.flash ( "Ошибка"); res.locals.success = REQ .flash ( "успех"), следующий (); я поставил флэш-подключение в регистре маршрут REQ. вспышка ( "ошибка", Error.message); когда я подписаться на это показывает сообщение после очередного обновления, а не на той же странице
Harsh kumar
1

голосов
0

ответ
79

Просмотры

Браузер назад кнопка проблема - (с использованием sapui5, экспресс и Node.js)

У меня есть приложение с помощью экспресс и Node.js. В этом приложении логин пользователя с помощью учетных данных, а затем генерировать JWT маркер для аутентификации дополнительного запроса HTTP. Я пытаюсь удалить кэш браузера, так что, когда пользователь войти там не должно быть веб-страницы кэша браузера, когда пользователь ударил кнопку назад / вперед. Я сделал некоторые исследования и попробовал несколько решений, но без успеха. Не один из них - app.use (функция (Req, Рез, следующий) {res.header ( 'Cache-Control', 'частный, нет кэша, нет-магазина, нужно обязательно перепроверять'); res.header (» пока не истечет, '-1'); res.header ( 'Прагма', 'не-кэш'); следующий ()}); Пожалуйста, руководство. Спасибо
user557657

Просмотр дополнительных вопросов