- .babelrc
- .gitignore
- Client.js
- Compute cloud
- Exam review interval
- Github
- How do i setup a ssl certificate for an express.js server?
- Javascript – получение публичного ssl сертификата для сервера node.js –
- Public
- Recertification interval
- Scope
- Test retake interval
- Testing details
- Visual studio code
- We are certifying early intermediate level developers.
- Webpack.config.js
- Автоматически обновляемый ssl
- Выбор хостинга
- Делаем всё удобно или цикл разработки с помощью git
- Как нормально запустить ssl сертификат на node js
- Как установить доверенный сертификат в систему средствами node.js?
- Настройка bitvise ssh
- Папка server
- Подключаемся к облаку с пк и выбираем бесплатный ssh клиент
- Предисловие
- Recommended learning materials
.babelrc
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"browsers": [">0.25%", "not ie 11", "not op_mini all"]
}
}
],
"@babel/preset-react"
],
"plugins": [
"babel-plugin-styled-components",
"@babel/plugin-transform-runtime"
]
}
Настройки для создания нашего react_bundle с поддержкой браузеров используемых более >0.25% пользователей.
.gitignore
Тут мы указываем те файлы/папки, которые мы не хотим выгружать на github. Они будут только на данном устройстве и git не будет отслеживать/показывать их изменения. Открываем и вставляем:
/node_modules/
/logs/*
# exception to the rule
!logs/.gitkeep
/public/react_bundle.js
/public/isProd.js
Так как github не выгружает пустые папки, то можно внутрь что-нибудь положить, к примеру пустой файл .gitkeep. Сохраняем файл и закрываем.
Client.js
import React from 'react'
import { render } from 'react-dom'
render(<div>Реакт!!</div>, document.getElementById('cookies'))Рендерит наш фронтэнд в div с тегом cookies.
pm2-watch.json — позволяет на хостинге командой «npm run server» запустить сервер с отслеживанием изменений в коде и автоматической перезагрузкой.
Compute cloud
Тут у нас будут происходить вычисления 🙂 То есть мы создадим виртуальную машину с Linux (я выбрал ubuntu 18.04), установим node.js приложения и postgreSQL.
Жмём создать ВМ, выкручиваем все настройки на минимум, так как при разработке нагрузки не будет (когда наше приложение выйдет в свет, тогда и подкрутим побольше, ну и будем мониторить по графикам).
Exam review interval
Because of changes to the Node language, every two years the exam will be
reviewed for content appropriateness and accuracy. If it is determined that the
exam needs substantial revision, then another JTA will be undertaken.
Github
Github — это место, где будет лежать код нашего приложения. Если коротко, принцип работы для одного человека следующий:
Всё быстро, просто и удобно.
Собственно регистрируемся на Github и создаём private репозиторий для нашего приложения (он будет доступен только нам):
How do i setup a ssl certificate for an express.js server?
This is my working code for express 4.0.
express 4.0 is very different from 3.0 and others.
4.0 you have /bin/www file, which you are going to add https here.
“npm start” is standard way you start express 4.0 server.
readFileSync() function should use __dirname get current directory
while require() use ./ refer to current directory.
First you put private.key and public.cert file under /bin folder,
It is same folder as WWW file.
no such directory found error:
key: fs.readFileSync('../private.key'),
cert: fs.readFileSync('../public.cert')
error, no such directory found
key: fs.readFileSync('./private.key'),
cert: fs.readFileSync('./public.cert')
Working code should be
key: fs.readFileSync(__dirname '/private.key', 'utf8'),
cert: fs.readFileSync(__dirname '/public.cert', 'utf8')
Complete https code is:
const https = require('https');
const fs = require('fs');
// readFileSync function must use __dirname get current directory
// require use ./ refer to current directory.
const options = {
key: fs.readFileSync(__dirname '/private.key', 'utf8'),
cert: fs.readFileSync(__dirname '/public.cert', 'utf8')
};
// Create HTTPs server.
var server = https.createServer(options, app);
Javascript – получение публичного ssl сертификата для сервера node.js –
Public
Тут статические файлы нашего сайта будут лежать, изображения там, фавиконки и т.д.
Отдельно остановимся на двух файлах:
index.html:
Recertification interval
Recertification requirements and interval:
- Regulatory requirements: there are no regulatory requirements for Node.js.
- The exam will reflect changes to normative documents annually with LTS cycle.
- The exam will be reviewed and updated every 2 years
- The LTS releases support cycle reflects the nature and maturity of the industry or field in which the certified person is working.
- The risks resulting from an incompetent person include the following: bad hire; lost recruitment money; incremental training costs; missed deadlines.
- Ongoing changes in technology, and requirements for certified persons are reflected in ES releases
- Requirements of interested parties were taken into account in formulating the task force, and will be included in guiding bodies for updating and revision of the exam. Interested parties include:
- Programmers, Training companies, Foundation and Consultancy companies
- Organizations using Node Hiring managers
- No surveillance activities are planned to evaluate certificants on an ongoing basis.
Scope
Participants individually attempted scope statements in writing and then
presented them aloud while transcribed. The critical elements of each were
highlighted, captured, and combined into a single scope statement.
Node.js Certified Developers can work proficiently in JavaScript with the
Node.js platform to build, debug, test and maintain secure framework-independent applications and CLI tools.
Test retake interval
In order to maintain current certification, certificants will be required to
retake the Node.js certification exam every two years.
Testing details
A test length of 3 ½ hours was deemed appropriate for the scope of the exam and
for human comfort/attention span. The test time includes introductory material,
practice items, instructions regarding control structure, as well as final
instructions regarding results reporting.
The test will consist of approximately 30 items, depending on the results of
Beta testing. The test will be comprised of one form with item variants for
security purposes.
Writing, editing and testing code are going to be the assessment mechanisms used
in this exam. In some items, partial code will be provided to the candidate to
reduce the time required to demonstrate the skills to be evaluated. In other
contexts, the candidate would write an entire program.
No prerequisites or credentials are required to take the examination. This has
to be stated for those who are not familiar with certification programs.
Visual studio code
Для начала выберем редактор исходного кода, где будем работать. Я выбрал Visual studio code, так он прост, удобен, в нём много плагинов и можно настроить синхронизацию настроек если вы работаете с нескольких устройств. Собственно скачиваем, устанавливаем, запускаем, выбираем общую папку приложений, так как git clone создаст нам свою.
Плагины я использую следующие:
Устанавливаем git для ПК.Открываем консоль в VScode с помощью ctrl shift ` или terminal>new terminal
Отступление:
В консоли windows плохо с русскими символами и чтобы не было крякозяблов нужно открыть file>preferences>settings, ввести в поле terminal.integrated.shellArgs.windows, нажать
И добавить строку «terminal.integrated.shellArgs.windows»: [“-NoExit”, “/c”, «chcp 65001»],
Повторяем команду для загрузки файлов с github:
We are certifying early intermediate level developers.
Developers who certify cannot do everything, but hit the ground running with a
Node.js job.
Considering the constraints of the exam environment (isolated and proctored), we
needed to address concerns around security, exam item exposure, and cheating.
Discussions spanned the full gamut of what we use on a day to day basis as
Node.js developers. Amongst resources considered to have available/unavailable:
- Google search
- Lodash, underscore
- JavaScript frameworks
- Node.js frameworks
- Testing frameworks
- A white list of modules
- Keeping resources within VM
- Potential of developers to create npm packages that have answers pre-coded and
this can be logistically taxing to monitor by the Certification team.
The issue of the programming environment candidates would encounter as part of
the certification was discussed at length as well. Considerations included:
- Important to be vendor-neutral, no lock-in
- Tiers of support for Node.js were talked about: Linux, Mac, Windows. Ways to
provide a single environment but account for those who develop outside of OSX
so they are not penalized. - Make sure we’re covering the approximate quirks that different operating
systems have in the answer logic/testing - Write agnostic JavaScript/Node.js items
- Infrastructure may be provided by a third party with constraints as yet
unknown
Webpack.config.js
Сборщик реакт приложения:
const webpack = require('webpack'),
path = require('path'),
BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
module.exports = (env, argv) => {
let prod = argv.mode == 'production'
let config = {
entry: './client.js',
output: {
path: path.resolve('./public'),
filename: 'react_bundle.js'
},
module: {
rules: [
{
test: /.(js|jsx)$/,
exclude: /node_modules/,
loader: 'babel-loader'
},
{
test: /.css$/,
use: ['style-loader', 'css-loader']
}
]
},
resolve: {
alias: {
client: path.resolve('./client/shared'),
public: path.resolve('./public')
}
},
plugins: [
argv.analyze ? new BundleAnalyzerPlugin() : false,
prod ? new webpack.optimize.AggressiveMergingPlugin() : false,
new webpack.ContextReplacementPlugin(/moment[/\]locale$/, /ru/)
].filter(Boolean),
optimization: {
minimize: prod ? true : false
},
performance: {
hints: false
}
}
return config
}
Если коротко, то он открывает файл client.js и все что у него внутри, собирая react_bundle и помещая его в папку public, откуда потом через открытый index.html он будет загружен.
Автоматически обновляемый ssl
Когда вы купите себе домен и привяжете его к IP облака, пример
Выбор хостинга
На своё хобби я готов был тратить 10$ в месяц, поэтому выбирал тот хостинг, с которым планировал и остаться в будущем. Как я и говорил, до этого у меня был 0 опыт, в том числе и с хостингом сайтов. Я попробовал и отказался от следующих:
Jelastic: красивый и удобный интерфейс, вроде всё интуитивно, масштабируемо и понятно. Тем не менее столкнулся с трудностями при настройке (nginx почему-то из vps не хотел работать, только их отдельным модулем) и подключении SSL(и автоматическом обновлении) к русскоязычном домену стандартными средствами (обещали баг пофиксить, но я не хочу ждать)
Делаем всё удобно или цикл разработки с помощью git
Всё вроде работает, но мы же не будем работать всё время подключаясь к облаку. К тому же вдруг мы будем в будущем работать не одни.
Как нормально запустить ssl сертификат на node js
имеется SSL сертификат(достоверенный) и приложение на ноде:var fs=require("fs");
var express = require('express');
var https = require('https');
var redis=require("redis");
var client = redis.createClient();
var mysql=require("mysql");
var app = express();
client.on("error", function (err) {
console.log("Error " err);
});
var options = {
key: fs.readFileSync('ssl/key.pem', 'utf8'),
cert: fs.readFileSync('ssl/server.crt', 'utf8')
};
var server=https.createServer(options, function(req, res){
console.log("https сервер запущен");
}).listen(9099);
var io = require("socket.io")(server);
Пробовал запустить код, но выдавало ошибку: crypto.js:132
if (options.cert) c.context.setCert(options.cert); ^
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
Нашел решение через выполнение:openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem
openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out server.crt
И var options = {
key: fs.readFileSync('./key.pem', 'utf8'),
cert: fs.readFileSync('./server.crt', 'utf8')
};
Теперь все запускается, но выдает сообщение о том, что сертификат недостоверный(необходимо подтвердить действие перехода) его еще и скачать нужно на компьютер, дабы браузер открыл. Может кто сталкивался с подобным, что можно сделать?
Как установить доверенный сертификат в систему средствами node.js?
Необходимо тестировать веб-приложения на https соединении локально.
Нашли такое решение:
Через /etc/hosts для 127.0.0.1 прописывается резолв дополнительных доменов
Сделали самоподписанный корневой сертификат, им подписываются сертификаты на локальные домены приложений
Хочется автоматизировать добавление корневого сертификата в доверенные, желательно средствами node.js
Как не спрашивал гугл – все ведет на ручную установку…
Целевые платформы:
– deb-based дистрибутивы linux (преимущественно Ubuntu/Mint) – Chrome, FF
– osX – Safari, Chrome
– win10 – MS Edge, Yandex.Browser, Chrome
Так же полагаю, что понадобятся запрос привилегий суперпользователя, на linux есть gksudo, а есть ли аналоги на osX и win?
Настройка bitvise ssh

Папка server
Тут лежит на бэкэнд и все пути.
logger.js — в зависимости от среды isProd логирует или в консоль или в errors.log
'use strict'
const pino = require('pino'),
isProd = require('../public/isProd')
let logOptions = isProd
? {
level: 'warn', // уровень логирования
timestamp: () => {
return ',"time":"' new Date() '"'
}
}
: {
level: 'warn',
prettifier: require('pino-pretty'),
prettyPrint: {
levelFirst: true,
translateTime: true
}
}
let dest = isProd ? pino.destination('./logs/errors.log') : pino.destination(1)
let log = pino(logOptions, dest)
module.exports = log
server/api/
open.js — сюда добавляем наши пути.
'use strict'
module.exports = function(fastify, options, next) {
fastify.route({
method: 'GET',
url: '/',
handler: async (req, res) => {
res.send('api / route')
}
})
fastify.route({
method: 'GET',
url: '/hi',
handler: async (req, res) => {
res.send('api / route hi')
}
})
next()
}
После настройки и проверки всего на Localhost, просто выгружаем всё на github, а оттуда git pull на хостинг. Всё что на хостинге нужно будет сделать, это установить модули node.js командой «npm i» и создать файл isProd.js
Подключаемся к облаку с пк и выбираем бесплатный ssh клиент
Стандартный Putty позволяет работать только командной строкой, а так как мне пользователю windows это непривычно, то я начал искать клиент с псевдо-проводником. Сначала я попробовал Mobaxterm, но он после какого-то времени простоя отключается, проводник вообще зависает, поэтому сейчас работаю с
и пока проблем как у Mobaxterm не наблюдаю.
Предисловие
Начну с того, что однажды мне захотелось создать приложение. Желание такое возникло из-за того, что я люблю читать, а нормальных книжных агрегаторов на просторах русского интернета просто нет. Собственно из боли поиска чего бы почитать и попыток вспомнить как называлась та книжка, которую я недавно читал и на какой же главе я остановился, родилось желание сделать веб-приложение, в котором всё это было бы возможно и удобно.
Не буду рассказывать как я изучал javascript, node.js, react, html, css и т.п., перейдём к тому, к чему я пришел на данный момент, чем хотел бы с вами поделится и, конечно, послушать конструктивную критику специалистов.
Как и многие я тренировался на собственном ПК на localhost:3000, создавал front/back-end’ы, верстал, работал с api и т.д., но меня всегда тревожила мысль а том, как же всё это потом перенести на хостинг? Будет ли оно работать? Нужно ли будет переписывать из-за этого код?
Recommended learning materials
(to be refined and moved to a separate document)
A subset of these will be provided as part of the isolated exam environment.
- Node docs
- node_modules readme files
- MDN JavaScript docs
- Package.json docs
