Andrew
Лучше сразу брать хороший пример)
Andrew
Можешь расковырять експресс)
Andrew
dima
хорошо, а то я тут начал на ютубе смотреть
https://www.youtube.com/watch?v=eqlZD21DME0&list=PLf04g9SegLd-NEPeKDYsy3EoKSjgqrDs3&index=2&t=0s
dima
короче смысла нету так что ли?
dima
буду экспресс ковырять
Andrew
Ну мб и есть но твой код кривоват)
dima
основы там понял вообще хоть как нода устроена
dima
в чем. подскажи. мне как раз и нужна конкретная критика
dima
без прикрас
Andrew
Хотя для начала норм
dima
ок
dima
тогда напишу на экспрес
dima
потом будет критика
Anonymous
Deleted
Всем привет. Вопрос по Node, только первые шаги. Написал простой сервер. Надо отдать содержимое файла, потом принять POST data и обновить файл.
Мне нужен код ревью. Правильно ли использую те или иные методы. ну и любые другие замечания
const http = require("http");
const fs = require("fs");
const hostname = "127.0.0.1";
const port = 5000;
const path = "/todoList.json";
const server = http.createServer((req, res) => {
res.setHeader("Content-Type", "text/plain");
res.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");
if (req.url === "/todo") {
res.statusCode = 200;
fs.readFile(__dirname + path, (err, data) => {
res.end(data);
});
} else if (req.url === "/todo/add" && req.method == "POST") {
let body = "";
req.on("data", function(data) {
body += data;
//if (body.length > 1e6) req.connection.destroy();
fs.writeFile(__dirname + path, body, { flag: "w" }, function(err) {
if (err) {
res.statusCode = 500;
res.end();
}
res.statusCode = 200;
res.end();
});
});
} else {
res.statusCode = 500;
res.end("Access denied");
}
});
server.listen(port, hostname, () => {
console
.log("Server running");
});
1. Тут должна быть проверка на GET method:
if (req.url === "/todo") {
2. тут у тебя сервер отвечает неправильным Content-Type'ом, должен быть application/json, а у тебя text/plain, потому что как я вижу у тебя расширение файла JSON. Также у тебя нет проверки на err
fs.readFile(__dirname + path, (err, data) => {
res.end(data);
});
3. Тут неправильно читаются потоки, сначала надо прочитать все данные через событие data, а потом в событии end записать в файл. Либо в событии data надо отдельные приходящие чанки (это твоя переменная data) писать через флаг append. Также не совсем ясно какая вообще цель этого запроса - слово add в пути вроде как подразумевает дописывание новых данных, а ты полностью перезаписываешь файл
req.on("data", function(data) {
body += data;
//if (body.length > 1e6) req.connection.destroy();
fs.writeFile(__dirname + path, body, { flag: "w" }, function(err) {
4. На несуществующие пути на сервер надо отвечать 404 Not found
else {
res.statusCode = 500;
res.end("Access denied");
}
dima
Anonymous
dima
1. Тут должна быть проверка на GET method:
if (req.url === "/todo") {
2. тут у тебя сервер отвечает неправильным Content-Type'ом, должен быть application/json, а у тебя text/plain, потому что как я вижу у тебя расширение файла JSON. Также у тебя нет проверки на err
fs.readFile(__dirname + path, (err, data) => {
res.end(data);
});
3. Тут неправильно читаются потоки, сначала надо прочитать все данные через событие data, а потом в событии end записать в файл. Либо в событии data надо отдельные приходящие чанки (это твоя переменная data) писать через флаг append. Также не совсем ясно какая вообще цель этого запроса - слово add в пути вроде как подразумевает дописывание новых данных, а ты полностью перезаписываешь файл
req.on("data", function(data) {
body += data;
//if (body.length > 1e6) req.connection.destroy();
fs.writeFile(__dirname + path, body, { flag: "w" }, function(err) {
4. На несуществующие пути на сервер надо отвечать 404 Not found
else {
res.statusCode = 500;
res.end("Access denied");
}
Ого, спасибо огромное, буду разбирать.
dima
ну и попутно на экспрессе
dima
переделывать
dima
понял, принято, спс
Deleted
понял, принято, спс
если коротко:
пути сервера должны описывать что где что лежит, как на книжной полке
в путях не должно быть глаголов, это не действие, а адрес
то что ты хранишь в определенном пути - называется ресурс
чтобы взаимодействовать с ресурсами ты используешь различные HTTP методы, есть 5 основных
Andrew
Ещё options не плохо глянуть, лишним не будет
dima
понял. да нашел тут не плохую инфу о REST и options тоже
Deleted
понял, принято, спс
GET - получить определенный ресурс или список ресурсов
например для получения конкретной книги
GET /book/harry-potter-philosopher-stone
или для получения списка книг
GET /book/
PUT - создать или перезаписать ресурс по определенному адресу
например
PUT /book/harry-potter-philosopher-stone
и в теле запроса должна быть вся книга
PATCH - изменить часть ресурса
например PATCH /book/harry-potter-philosopher-stone
и в теле запроса должна быть та часть книги которую надо перезаписать и возможно указание на нужную страницу с которой надо начать перезапись
DELETE - удалить ресурс
например DELETE /book/harry-potter-philosopher-stone
удаляет книгу с сервера
и POST используется для случаев когда тебе надо создать ресурс но в момент запроса ты не знаешь его пути, а путь ресурса генерируется сервером (например через новый идентификатор), например
POST /task
может создавать некоторую новую задачу с идентификатором который сгенерирует сервер и в результате клиент получит в ответ ID задачи, например 329, и будет знать что путь ресурса это /task/329
или когда надо запустить какую-то процедуру на сервере которая не связанна с конкретным ресурсом
например какой нибудь
POST /book/harry-potter-philosopher-stone/start-paypal-payment
может запускать некоторый процесс оплаты книги через paypal
dima
@ujeenator, спасибо огромное. буду писать
dima
Всем спасибо за советы и полезную инфу парни
dima
Вот наткнулся на интересную статью как использовать девТул для ноды
https://medium.com/the-node-js-collection/debugging-node-js-with-google-chrome-4965b5f910f4
Кто-нибудь юзает?
dima
Игорь
с тобой никто)
NCR
<input type="text" class="form-control ${kard['using'] == 'owned' ? 'is-valid' : ''}">
Это отвратительно или просто ужасно?
Андрей
Хороший тон добавлять новые методы встроенным типам или лучше написать просто функцию?
Array.prototype.__proto__.shuffle = function() {
var randomIndex, tmp;
this.forEach(function(value, i, array) {
randomIndex = Math.floor(Math.random() * i);
tmp = array[i];
array[i] = array[randomIndex];
array[randomIndex] = tmp;
});
return this;
}
Xaxashutkin
copperdrums
А кто может порекомендовать, какие вещи на Javascript стоит реализовать на сайте в качестве тренировки?
Александр
Здрасьте. памагити?
Александр
короч, есть код, я не шарю в JS разобраться тут помогут или пошлют куда подальше в какую нибудь другую группу?
Vlad
если для тебя разобраться == сделать_за_тебя, то скорее всего пошлют
Александр
не, есть готовый код, работбраться значит пару ключевых комментариев что откуда написать.
https://pastebin.com/jWwCvdRd
Vlad
йоба, это ведь java, а не js
Anonymous
Александр
я откуда знаю что это вообще такое, куда направили туда пишу, смотрю код - нихрена не вижу, синтаксиз нихрена не понимаю.
PHP понимаю , а это что за код понятия не имею
Vlad
ну плохо, что сказать
Vlad
хотя если хоть что-то из программирования понимаешь, то не должно было составить труда и тут разобраться
Андрей
Дмитрий
Здравствуйте, товарищи. Скажите, если мы знаем, что есть файл 'dir/file.css' (путь относительно скрипта), то как нам красиво получить абсолютный путь к этому файлу вида 'http://.../file.css'? На всякий случай замечу, что скрипт и текущая страница лежат на разных сайтах/доменах/серверах.
Andrew
У конфиг домен забей и генерь линки
Andrew
В конфиг
Павел
Vlad
Дмитрий
В конфиг
Да вот тож думаю попробовать через вебпак повтыкать нужные пути.
Andrew
copperdrums
игру напиши
Игра не подойдёт, у меня сайт, плюшки нужны именно для него. Пока смотрю на чужие сайты и что-то копирую, но есть же наверное список 101 того, что сейчас стоит имплементить
Mike
Ребят помогите пожалуйста с пояснением куском кода js https://jsfiddle.net/56o2sjLm/3/
Бывший коллега (связи с ним больше не имею) скинул код на ротейт элемента, но я не очень соображаю в алгебре и геометрии, чтобы самому придумать как написать это, так еще и непонятно он его написал...
Если возможно, помогите пожалуйста с правкой кода, чтобы переменные были понятные и комментарии были к тому, что происходит, чтобы я понял как это работает.
Спасибо!
Костянтин
Ты разбираешься в создании приложений, хочешь воплотить интересный проект в жизнь и при этом собрать денежные сливки после его создания? Может и звучит слишком хорошо, а местами и шаблонно. Однако, это возможно реализовать. И для этого необходимы вы, специалисты своего дела. Итак, ближе к сути дела, у меня есть идеи по созданию приложений по теме психологии с широкой монетизацией. И если вас устраивают эти пункты, буду рад начать с вами сотрудничиство (писать в личку).
1. Без первичных финансовых вливаний
3. Прибыль делится поровну
4. Желание создать действительно интересный и полезный для себя продукт
Vlad
хоть бы поздоровался
Mike
Vlad
та не ты)
Aleksey
Deleted
Mike
Anonymous
ℜ𝔬𝔪𝔞𝔫
а где пункт 0 и 2 ?)
Vlad
видимо вырезали, ибо не очень приятные вещи там
Anonymous
Vlad
Mike
Mike
Anonymous
Mike
Что не так?
по вращайте по разному, под разными углами, он резко скачет так как не должен был, так не должно быть
Mike
надо наверное добавить что-то?
Vlad
так ведь
Vlad
это когда курсор за экран вылазит
Vlad
не?
Mike
а хз) возможно меня глючит)
Anonymous
Anonymous
Эта коррекция приводит к пределам [0, 360)