#javascript-typescript
1 messages · Page 34 of 1
Je l'ai kick
ty
J'avais pas penser à ça je vais aller le mettre en œuvre
merci pour l'aide @noble mountain
Et pour tes rôles
Si tu les passes sous forme de tableau, ça passe ? : const isAuthorized = useRoleProtection(["admin", "driver"]);
Non quand c'est sous format tab[] ça ne passe toujours pas
Je pense que ça rapport avec Supabase au niveau du Client
mais ce qui est étonnant c'est que tout est bien configuré mes variables d'env et les import rien ne manque y'a aucune erreur
J'ai une question
const isAuthorized = useRoleProtection(supabase, ["admin", "driver"]);
ça marcherait ça ?
Si useRoleProtection s'attend à recevoir le client Supabase en premier argument, non?
Bro tu es un Démon
ça marché
1000x Merci
Exactement tu as raison il s'attendais à recevoir comme premier argument le client et en suite les rôles
Et bah parfait 😄
Pourquoi faire un useEffect alors que ta page de base et un serveur side 🤔
Ça augmentera la vitesse de chargement
Je pense qu’il ne sait pas utilisé nextjs
Qui serait traduire un code en go en js ?
Moi, si tu as le budget fait une offre
@round carbon
Tout dépend de tes compétences
Et bien ça fait 4 ans que je fais du JS/TS et 1 an et demis que je fais du Go
ici c'est "use client" et je cherchais à récupération de données côté client tu vois d'où mon get à l'intérieur
ça ne fait que 3 mois que j'utilise Next Js je suis entrain encore de découvrir de plus en plus de choses grâce à ça et vos réactions je pourrais optimiser mon code. Tout les commentaires bénéfiques sont les bienvenue
Quelqu'un aurais une idée de pourquoi sa me met ca quand je veux cliquer sur un bouton ?
Ce n’est pas méchant hein, je dit juste ça à titre informatif 😉
Ton appel n’est pas obligé d’être côté client
Tu peux faire l’appel et envoyer la data côté client via les props
tu as un handler du côté de ton bot ?
qui va répondre à l'intéraction
en particulier est-ce que c'est la bonne custom-id ?
Btw ça c'est le code de ma commande
C'est mieux d'utiliser le langage que tu connais le plus 😉
Bah après ça dépend, si un langage est plus efficace dans un domaine donné autant l’apprendre
y’a un gars sur le discord qui a fait un bot qui scrap du web en GO..
Alors qu’en js ça aurait réduit son délai pour son bot vinted
tout est une question de sujet
Peut être mais pour les débutants il est conseillé d'utiliser leur langage de prédilection même si il n'est pas forcement adapter à la tâche.
Sur ce cas Python et Js ont des équivalents dans à peu prêt tout les domaines alors c'est good
Oui je suis plutôt d’accord, sinon ça risque de dégoûter le débutant en effet
Mais il est important que le débutant sache tout de même cela je pense, afin de rectifier le tir par la suite si le résultat n’est pas optimal à son goût en vrai
Oui mais là tu rentre déjà dans des notions bien trop complexe pour un débutant.
Un débutant ne sera pas analyser ces besoins sur le long terme au niveau de son projet et n'aura pas la présence d'esprit de ce demander si il faut qu'il utilise tel ou tel langage pour tel ou tel optimisation. Cela nécessite de connaitre les deux langages; si c'est le cas il ne demandera pas quel langage utiliser.
Il est vrai, ça viendra avec le temps 😉
bonsoir
excusez-moi j'ai une question
j'aimerais pouvoir vérifier que la requête de suppression côté back-end java s'est bien effectuée
pour angular
du coup j'aimerais savoir ce qui s'est passé côté angular
voici mon code :
//angular service...
this.HttpClient.delete<String>(this.userMoviesUrl+"/remove/"+user.id+"/"+movieSimple.imdbID)
.subscribe(response =>
{
if(response != null){
//remove from list
/*if(index!==-1){
console.log("film retiré de la liste de l'utilisateur : "+movie.imdbID);
this.userMoviesList.splice(index,1);
}*/
}
//console.log(movie.Title+" a été supprimé de la liste du user : "+this.userService.userAccount)
});
//java back-end
/**
*
* a remove method for an association between a movie and a user.
*
* @param id
* the user who watches the movie
* @param imdbID
* the movie watch with its imdbID.
*
* the movie and the user who watches this movie.
*
* @return
* a response that precises if everything end up properly.
*/
@DeleteMapping("/user/movie/remove/{id}/{imdbID}")
public ResponseEntity<String> removeMovieFromList(@PathVariable String id, @PathVariable String imdbID){
Movie movieSaved;
for(var existingMovie:movieRepository.findAll()){
//this movie is already in the database which is consistent
if(existingMovie.getImdbID().equals(imdbID)){
LOGGER.log(Level.INFO, "A movie with the imdb : "+imdbID+" has been found in the database");
movieSaved = existingMovie;
var idUserLong = Long.parseLong(id);
for(var watchMovie:watchMovieRepository.findAll()){
//Link between movie and user : found
if(watchMovie.getIdMovie() == movieSaved.getId() && watchMovie.getIdUser() == idUserLong){
//let's delete all these things
//removal succeed
watchMovieRepository.delete(watchMovie);
LOGGER.log(Level.INFO, "Success : the movie has been correctly removed !!");
return ResponseEntity.noContent().build();
}
}
}
}
LOGGER.log(Level.INFO, "Error : the movie that was supposed to be removed hasn't been found !!");
return ResponseEntity.notFound().build();
}
comment vérifier si mon programme a renvoyé un notFound ou un noContent côté front-end, pour ensuite faire une action en conséquence ?
HttpErrorResponse
(error: HttpErrorResponse) => {
if (error.status === 404) {
} else if (error.status === 204) {
} else {
}
}
);
Bonjour je suis entrain de faire un défilement de carte j'ai presque fini il y a que 2 petit beug
voici le but les parentese signifie la mise en avant pouvez vous m'aider svp
Au chargement : 1 (2) 3
Puis :
2 (3) 4
3 (4) 5
4 (5) 6
5 (6) 7
6 (7) 1
7 (1) 2
const leftButton = document.querySelector('.left-button');
const rightButton = document.querySelector('.right-button');
const cards = Array.from(track.children); // Convertit les cartes en tableau
const totalCards = cards.length;
let currentIndex = 0; // Index de la première carte visible
// Fonction pour mettre à jour la visibilité des cartes
function updateVisibility() {
cards.forEach((card, index) => {
card.classList.remove('visible', 'highlight'); // Réinitialise les classes pour toutes les cartes
// Affiche les trois cartes autour de l'index courant
if (
index === currentIndex ||
index === (currentIndex + 1) % totalCards ||
index === (currentIndex + 2) % totalCards
) {
card.classList.add('visible'); // Rendre visible
// S'assurer que la carte centrale est mise en avant
if (index === (currentIndex + 1) % totalCards) {
card.classList.add('highlight'); // Mise en avant de la carte centrale
}
}
});
}
// Fonction pour faire défiler vers la droite
function scrollRight() {
currentIndex = (currentIndex + 1) % totalCards; // Avance d'une position
updateVisibility(); // Met à jour la visibilité
}
// Fonction pour faire défiler vers la gauche
function scrollLeft() {
currentIndex = (currentIndex - 1 + totalCards) % totalCards; // Recule d'une position
updateVisibility(); // Met à jour la visibilité
}
// Initialisation de la visibilité au chargement
updateVisibility();
// Ajoute les événements de clic
rightButton.addEventListener('click', scrollRight);
leftButton.addEventListener('click', scrollLeft);
```
Bonjour à tous !
Je suis en train de coder un site web avec Vue.JS en front et une app nodejs/express en back.
J'ai codé un système de login et d'enregistrement de session mais les cookies ne s'enregistrent pas dans le navigateur quand je me connecte. Donc quand je vérifie mon authentification, le back me renvoie false à chaque fois. Bizarrement, tout marche quand j'utilise Postman pour tester mon back. Donc je pense que le problème ne vient pas du back mais du front.
Est-ce que quelqu'un aurait une idée ? Je peux donner plus de détails sur le code si vous voulez
Merci !
Salut, merci pour la description de ton problème, effectivement on va avoir besoin de code pour comprendre ce qui bloque. Tu peux nous envoyer ton code back-end & front-end stp ?
- Dans back/index.js :
require("dotenv").config();
const express = require("express");
const app = express();
const cors = require("cors");
const mongoose = require("mongoose");
const session = require("express-session");
// CORS
app.use(
cors({
origin: ["http://127.0.0.1:5173", "http://localhost:5173"],
credentials: true,
})
);
// SESSION
app.use(
session({
secret: process.env.SESSION_KEY,
resave: false,
saveUninitialized: false,
cookie: {
secure: false, // Mettre à true si vous utilisez HTTPS
httpOnly: true, // Empêche l'accès au cookie via JavaScript (à considérer)
sameSite: "None", // Nécessaire si vous utilisez des cookies entre domaines
},
})
);
// JSON FORMAT FOR POST REQUESTS
app.use(express.json());
const authRouter = require("./app/auth/route.config");
app.use("/auth", authRouter);
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Server started on ${PORT} !`);
});
- Dans back/app/auth/route.config.js :
const express = require("express");
const router = express.Router();
const { verifyAuth, login } = require("./services");
router.get("/", verifyAuth);
router.post("/login", login);
module.exports = router;
- Dans back/app/auth/service.js :
const bcrypt = require("bcrypt");
const session = require("express-session");
const User = require("../users/model/users");
const login = async (req, res) => {
try {
if (!req.body.hasOwnProperty("username")) {
return res.status(400).json({
error: {
type: "username",
message: "Le nom d'utilisateur est manquant",
},
});
}
const user = await User.findOne({
username: req.body.username,
});
if (!user) {
return res.status(400).json({
error: {
type: "username",
message: "Le nom d'utilisateur n'existe pas",
},
});
}
if (!req.body.hasOwnProperty("password")) {
return res.status(400).json({
error: {
type: "password",
message: "Le mot de passe est manquant",
},
});
}
if (!(await bcrypt.compare(req.body.password, user.password))) {
return res.status(400).json({
error: { type: "password", message: "Le mot de passe est incorrect" },
});
}
req.session.userID = user._id;
console.log(req.session.userID);
return res.status(201).json({
user: user,
});
} catch (error) {
return res.status(500).json({
error: error.toString(),
location: "auth.service.login",
});
}
};
const verifyAuth = (req, res) => {
console.log(req.session.userID);
if (req.session.userID) {
return res.json({
connected: true,
});
} else {
return res.json({
connected: false,
});
}
};
module.exports = { verifyAuth, login };
- Dans front/src/components/Login.vue :
<template>
...
</template>
<script setup>
import { ref } from "vue";
const props = defineProps({
open: { type: Boolean, required: true },
secondayButtonTxt: { type: String },
});
const username = ref("");
const password = ref("");
const errorUsername = ref("");
const errorPassword = ref("");
const login = () => {
fetch(`${import.meta.env.VITE_BASE_URL_API}/auth/login`, {
method: "POST",
credentials: "include",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
username: username.value,
password: password.value,
}),
})
.then((resp) => resp.json())
.then((resp) => {
if (resp.error) {
if (resp.error.type == "username") {
errorUsername.value = resp.error.message;
} else if (resp.error.type == "password") {
errorPassword.value = resp.error.message;
}
} else {
console.log(resp.user);
}
fetch(`${import.meta.env.VITE_BASE_URL_API}/auth`, {
credentials: "include",
})
.then((r) => r.json())
.then((resp) => {
console.log(resp);
});
})
.catch((error) => {
console.error("Erreur lors de la connexion :", error);
});
};
</script>
<style>
...
</style>
- Dans front/src/components (où je vérifie l'authentification) :
<template>
<div style="display: flex; align-items: center">
<div style="width: 100%">
<h1>Translate App</h1>
<RouterLink class="redirection" :to="props.redirectionURL">{{
props.redirectionName
}}</RouterLink>
</div>
<button @click="loginOpened = true">
<div style="display: flex; align-items: center">
<span class="material-symbols-outlined" id="connexion-icon">
person
</span>
<span id="connexion-txt">{{
isAuthenticated ? "Mon compte" : "Connexion"
}}</span>
</div>
</button>
</div>
<hr />
<Login :open="loginOpened" @close="loginOpened = false"></Login>
</template>
<script setup>
import Login from "./Login.vue";
import { onMounted, ref } from "vue";
const props = defineProps({
redirectionName: { type: String, required: true },
redirectionURL: { type: String, required: true },
});
const loginOpened = ref(false);
const isAuthenticated = ref(false);
onMounted(() => {
try {
fetch(`${import.meta.env.VITE_BASE_URL_API}/auth`, {
credentials: "include",
})
.then((resp) => resp.json())
.then((resp) => {
console.log(resp.connected);
isAuthenticated.value = resp.connected;
});
} catch (error) {
console.error("Erreur lors de la vérification de session :", error);
}
});
</script>
<style>
.redirection {
font-size: 2vh;
padding: 1.5vh;
}
#connexion-icon {
display: none;
margin-right: 10px;
}
@media (max-width: 600px) {
#connexion-icon {
display: block;
margin-right: 0px;
}
#connexion-txt {
display: none;
}
}
</style>
oui
ok
Le souci dans ton code, c'est que ton controller signup ne retourne pas un token pour authentifier l'utilisateur immédiatement après la création du compte. il doit pouvoir générer un token, le retourne à l'utilisateur et ensuite qui permet au client de rediriger l'utilisateur vers la page d'accueil en se basant sur ce token
ah oui okay, tu sais comment je peux regler ca s'il te plait ?
depuis ce matin je suis dessus je galère trop
const token = jwt.sign({ userId: user._id.toString() }, SECRET_TOKEN, { expiresIn: '24h' });
res.status(201).json({
message: 'User registered successfully',
token: token,
userId: user._id.toString()
});
Si je te dis pas de bêtises, c'est ça côté back
"Si la réponse est un succès et qu'elle inclut un token, tu sauvegardes ce token dans localStorage ou sessionStorage. "
ca je le met dans authcontrollers, a la place du const token que jai deja
Faut que tu mettes vraiment ça
T'as rien à modifié à part ton res.status
et à ajouter le const
Ensuite, côté client tu dois utiliser le token pour authentifier l'utilisateur et le rediriger vers la page d'accueil
dans user.js ?
Par exemple :
async function registerUser() {
try {
const response = await fetch('/api/auth/signup', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: document.getElementById('email').value,
password: document.getElementById('password').value
})
});
const data = await response.json();
if (response.ok) {
localStorage.setItem('authToken', data.token);
window.location.href = '/index.html';
} else {
console.error('Erreur lors de l’inscription:', data.message);
alert(data.message);
}
} catch (error) {
console.error('Erreur réseau:', error);
alert("Une erreur réseau est survenue");
}
}
Après tu peux tester depuis /api/auth/signup avec postman d'envoyer une requête post avec un email et un mot de passe et tu es sensé récupérer un token et le message de succès
Après faut que tu adaptes par rapport à tes fichiers, etc...
Mais normalement ça devrait être approximativement correct
c'est pas normal si @noble mountain
sur postman c'est bon ca fonctionne, mais quand je vais sur ma page web ca ne marche pas je ne peut pas me register ca ne fait rien quand je clique dessus
Yo, je t’ai ajouté amis
merci @fervent pagoda
Bonjour, je reviens vers toi pour savoir si tu avais une idée du problème avec le code que j'ai fourni ?
Bonjour, je reviens vers toi pour savoir
Bonjour j'aurais besoins d'aide sur la création d'un bot merci a vous (j'ai déja tout les fichier je ne sais juste pas faire la création et l'hebergement du bot)
Tu a plusieurs choix, soit utiliser des services qui te propose l'hébergement d'app nodejs, ou alors le mettre toi même sur un vps
Ou l'héberger chez toi sur un raspberry ou un ordi allumer 24/24
Quelqu'un connais une bonne bibliotehque folder/file tree ?
Hello, toujours besoin d'aide ?
qu'elle stack ?
perso sous react j'utilise sortable et sous vue TreeList
React 19
Hello merci mais là j'ai un soucis avec mon bot , faut je regarde avant
Dacc ping moi si ta besoin d'aide ^^
Hey, les hébergeurs gratuits se font de plus en plus rares. Toutefois il existe encore quelques hébergeurs qualitatifs 100% gratuit comme Discloud (Je sais pas si on peut vraiment considéré ça comme une « pub ». Sorry le staff 🫣)
après y'a des hébergeurs payant de qualité pour moins de 5e par mois ussi
Ouep, discloud c’est 2$/par mois y’a même pour 1$ je crois
t'as dis que c'était 100% gratuit ...?
Ouep, mais il existe des plans payants qui sont très cool, ce qui empêche pas l’hébergeur d’être partiellement gratuit et pouvoir avoir son bot allumé 24/7
Ça existe plus le gratuit ça demande forcement la cb
bah c'est pas 100% gratuit alors mdr
Techniquement si 🤨
Les trucs payants c’est qu’un « plus »
Rassures-moi, c’est quand même pas en prod ça….
C’est pile le genre de trucs tout moches que je fais pour faire les premiers tests avec l’API 😭
Il y a encore énormément d'hébergeurs gratuits qui proposent des Ptero ou équivalent sans avoir à s'engager avec une CB
Qui en contre partie te vole ton taff 😂
Non mon dev 😂😂, je vais faire de la création et hébergement de bot discord, je me suis inspirée de ptérodactyle pour l'edition de fichiers
Toi aussi tu vas voler le taff du coup 😮
J'héberge que des bot perso que j'aurais créé 🤔
Je vois ça oui…
salut tout le monde. je travaille actuellement dans une application angular et j'ai une sorte de panneau d'administration côté utilisateurs. au lieu d'utiliser des liens dans la sidebar, j'ai utilisé des boutons qui permettent de modifier le contenu de l'espace utilisateur, mais je ne sais pas si c'est une bonne pratique ou si je dois simplement utiliser des liens. ici le te,plate de mon component user's space
<div class="w-full h-full bg-black z-30 absolute top-0 left-0 bg-opacity-70 hidden" id="dark_overlay"></div>
<app-sidebar
(tabSelected)="onTabSelected($event)"
[userType]="userType"
>
</app-sidebar>
<section class="p-4 md:mr-64 flex flex-col w-full"
<section id="dashboard-content mt-40 w-full">
<div class="main-content flex flex-col items-center w-full">
<div class="font-semibold mt-10 text-3xl text-slate-600 text-center">{{"WELCOME_IN" | translate}} <span class="text-pink-600">{{"OF" | translate}} GozenServices</span></div>
<div class="w-full" *ngIf="selectedTab === 'dashboard'">
<app-dashboard></app-dashboard>
</div>
<div class="w-full" *ngIf="selectedTab === 'profile'">
<app-profile></app-profile>
</div>
<div class="w-full" *ngIf="selectedTab === 'stats'">
<app-statistics></app-statistics>
</div>
<div class="w-full" *ngIf="selectedTab === 'jobs' ">
<app-jobs></app-jobs>
</div>
<div class="w-full" *ngIf="selectedTab === 'notifications' ">
<app-notifications></app-notifications>
</div>
<div class="w-full" *ngIf="selectedTab === 'messages'">
<app-jobseeker-messages></app-jobseeker-messages>
</div>
</div>
</section>
</section>
</main>
ça peut offrir une expérience plus interactive si bien implémentée. Faut juste que tu t'assures qu’ils sont visuellement intuitifs et cohérents dans leur fonction de navigation.
Après les gens s'attendent plus à un lien
Un bouton c'est plus une interaction
Alias CRUD en général
Le design reste le même. juste qu'au lieu de liens et du router-outlet, j'ai un bouton qui appelle une fonction en passant le nom de la page à afficher dans le component parent qui lui modifie son contenu a l'aide d'une serie de if
Alors la
C'est une application à grosse utilisation ou une app interne ?
Parce que si t'as vraiment une série de if j'te dis bonne chance dans le temps
si ça vient à être une grosse application faut que t'utilises vraiment router-outlet
Ta méthode actuelle charge tout dans le même composant parent, ce qui peut ralentir le chargement de l'application avec l'augmentation du nombre de composants
ça devient plus compliqué de tester chaque scénario ou d’ajouter facilement de nouvelles pages. On rappelle que le routage est conçu pour gérer la navigation de manière standardisée et permet des tests plus simples.
okay d'accord,, merci du conseil
Et en utilisant le router-outlet, j'utilises les standalone components, donc pas de modules . tu aurais des conseils pour organiser des les routes ? c'est quoi ta méthode de manière à ne pas avoir un nesting de routes touffu, avec trop de routes qui ont trop de children
Yo les petits potes comment vous allez ?
un avis sur ionic ? car je cherchais à rendre crossplat une appli react donc on m'a sorti ionic sauf que idk 🤣
Gros projet très prometteur inclut déjà beaucoup de fonctionnalités et ready pour de la prod
L'outil Capacitor est très bien fait et possède une communauté solide (on retrouve déjà plusieurs modules permettant d'intégrer des fonctionnalités natives à ton app)
C'est solide et une très bonne solution pour le cross plateforme et s'adapte très bien entre web, android et iOs
Avec cet outil tu peux t'offrir le luxe d'avoir une seule code base pour 3 plateformes (et si tu pousses un peu tu peux même faire du watch) sans compromettre la lisibilité de ton code
ty
Bonsoir, est-ce-que des personnes qui connaissent le framework Next seraient dispo pour quelques informations sur la stack ?
J'ai un projet(petit) sur 3 mois pour la production d'un site web j'accompagne un stagiaire. Je voudrais savoir si s'approprier Next est possible dans un laps de temps si court et si tu aurais des conseils au niveau de l'architecture ou de son fonctionnement pour éviter de louper quelques concepts/packages ou autres importants. Sinon on peut prendre directement React mais pour améliorer le SEO et acquérir de l'expérience c'est toujours plus intéressant Next
Next c’est comme React, il y a seulement quelques différences surtout sur le routing
Mais concrètement en 2 semaine tu auras les bases sans soucis 🙂
J'ai pu lancer l'archi juste pour test et effectivement le routage a l'air d'être lié a l'arborescence des dossiers et fichier directement après je sais également qu'il y'a le rendu coter serveur et client ce qui est plutôt cool mais n'ayant jamais vraiment aborder la stack je voudrais pas non plus noyer le stagiaire derrière des concepts ou de la complexité venant du frameworks
T’es pas obligé de mettre la tête dans la partie serveur tu peux juste faire du client et ensuite apprendre comment marche le ssr
Mais la doc next est très bien expliqué, par contre fait attention si tu utilise app ou page router il y a des diffs dans la docs 😉
Ok c'est cool ça même si en réalité on aura pas tant besoin d'énormément de ressource de toute façon 😜
Mais pour les packages npm react = next donc pas de soucis de compatibilité 😉
Je note tu conseillerais quelques packages "obligatoires" pour faciliter le développement ?
Ceux déjà présent font parfaitement l’affaire après ça dépend de ton projet
Dans l'idée rien de vraiment fou quelques requête et redirection, il y a seulement une partie mapbox qui peut être plus ou moins complexe mais ca reste à voir pour cette partie
Merci de tes suggestions ca me sera utile 🙂
Bonjour j'aurai besoin de conseils est ce que certains d'entre vous pourrez me donner les méthodes et propriétés importantes en js les plus courantes ?
console.log("DEBUG numéro 465") sera ton meilleur ami quand tu seras bloqué 
JavaScript est un langage de programmation qui ajoute de l'interactivité à votre site web (par exemple : jeux, réponses quand on clique sur un bouton ou des données entrées dans des formulaires, composition dynamique, animations). Cet article vous aide à débuter dans ce langage passionnant et vous donne une idée de ses possibilités.
je reviens vers toi concernant ionic c'est une petite dinguerie juste j'ai pas de mac donc pour test les app ios j'me fait enculer 😦
Salut j'ai eu un souci que je n'ai jamais eu au part avant
quand je fait npm install
Tes modules sont obsolètes
npm = 🤮
npm >>>
Hello, j'aurais besoins de quelques renseignements, je suis en train de faire un site web, mais je suis perdu sur toute la partie administrateur, la partie visuels etc avec HTML CSS je gère, mais j'aimerais bien faire un panel admin sur un sous domaine genre admin.mondomain.com, mais niveau protection de mots de passe, il faut utiliser node.js, car j'utilise Express pour la gestion des mots de passe, mais j'ai l'impression d'avoir loupé vraiment beaucoup d'élément... si quelqu'un pourrait m'aider
alors,
express et un router
pour stocker tes mot de passe utilise un bases de donnée genre mysql mariadb ou bien postgres
oublie pas d'hasher tes mot de passe si jamais tu a un bon frameworl nodejs qui a pas mal de package database/auth/social auth et j'en passe !
Framework: Adonisjs
bcrypt<3
obsolete mdr
Sérieux ?
T'utilises quoi ?
Argon2 ou scrypt
Je note je note
Bonsoir, quelqu'un connait le theme qui est utilisé par Adonisjs sur leur site ?
Comment ça ?
Alors c'est pas parceqie c'est plus maintenant que c'est obsolète, bcrypt et utiliser depuis plus de 20 ans
J'aimerais bien trouver le theme VS equivalent à celui utiliser sur leur site
Je crois que c'est le thème de la docs qui est comme ça mes check les thème dark sûrement
Oui et des fail qui on jamais etais patch ^^
derniere update il y a 1 ans
plus personne utilise bcryptjs
alors il est maintenu, les issues sur github sont toutes traitées, la dernièrre mise en prod date d'il y a un an certes mais c'est parce que il n'y a rien de majeur, pour le coup je suis vraiment le dév de bcrypt, il y a une seule réel vulnérabilité en ce moment qui est pas mega violente et très compliqué a mettre en place et qui en maturité est a l'état de PoC (SNYK-JS-INFLIGHT-6095116). Donc non bcrypt n'est pas obselèt, et reste le standard js pour les personnes n'ayant pas besoin d'algo quantum proof et ne travaillant pour un système avec une distribution massive. Dans ces deux cas alors oui Argon2 devient intéressant, même si il n'est pas vraiment quantum proof et est sensible a grover, mais il est nerf a cause de la ram qui rend sa parallélisation impossible. Donc un double hashage avec du argon2 c'est le mieux mais pour une extrêmement large majorité de gens c'est overkill. Bcrypt est maintenu et suffisent pour la plupart des dev (pour l'instant). Du moins de ce que j'en ai vu, si il y a des failles que je n'ai pas vu c'est étonnant mais je suis intéressé d'avoir les sources ?
pour ceux qui sont intéressés par des algo quantum proof il y a sha-3 qui n'est pas sensible a shore et qui avec grover déscend a 128bits de sécurité (ce qui large pour l'instant), ensuite il y a des algo post quantique
Moi j'ai juste une question peux être bêtes
Mes pourquoi pas fix la vulnérabilité ? Alors qu'on sais qu'elle est là ?
Ton message est arrogant, contradictoire et manque de rigueur. Tu prétends être le dév de bcrypt sans preuve, ce qui ne donne aucune crédibilité. Dire qu’il n’y a rien de majeur à mettre à jour en un an dans un domaine aussi critique que la sécurité, c’est irresponsable. Minimiser une vulnérabilité avec des termes comme "pas méga violente" est dangereux, car une faille reste une faille.
Tu critiques Argon2 tout en reconnaissant ses avantages, mais ton analyse est biaisée. Dire que c’est "overkill" pour la majorité des cas ignore les besoins concrets où il surpasse bcrypt. Enfin, tes références aux algorithmes quantiques sont du remplissage non expliqué. Si tu veux défendre bcrypt, fais-le avec des faits, des preuves et un ton professionnel.
PS : Être contributeur de bcrypt ne fait pas de toi son développeur principal, nuance importante.
Le culot en personne
Je pense que "suis", du verbe suivre et non être
c'est pas une question de d'arrogance ou de contradiction ou de rigueur, une faille qui n'est pas majeur et a l'état de poc et prises en comptes rapidement (#1053) n'est pas dramatique. On sait que c'est pris en compte, que ça va être traité et que l'impact est limité donc vu que tu nous parles de rigueur sources moi en quoi c'est majeur ? de mon côté tu as des souces publiques et vérifiables, tu parles de faits mais le seul ne sourcant pas ses paroles ici c'est toi. Je suis pas expert bcrypt ni contributeur, je fais simplement ma veille, si je me trompes je n'ai pas de problèmes avec, ça m'arrive mais donnes nous ✨ des sources ✨ . Si tu me donnes des sources, lundi au taffes je remplaces bcrypt sur tout nos projets.
Enfin je ne critique pas argon2, c'est plutôt toi qui manque de recul deçu : bcrypt c'est 2M de téléchargement par semaine contre 300k pour argon2 (source : npm, oui oui le truc que tu as dis guez sans donner d'explication) donc oui il y a plus d'issue sur bcrypt ce qui est logique étant donné qu'il est plus utilisé et a plus d'ancienneté, ça veut aussi dire que la communauté qui le maintient, le documente et fait de la recherche dessus est plus important. Enfin pour ce qui est du quantique et de la distribution de masse, c'est les seuls arguments qui peuvent défendre ton point de vue jusqu'a preuve du contraire (les sources, tout ça, tout ça), donc j'ai apporté des réponses sur ça, après si tu as besoins que je rentre dans l'explication mathématique de ça il n'y a pas de problème, tout est largement sourcé (oui encore les sources) sur google student (tu peux vérifier d'ailleurs le sérieux des scientifiques avec leurs historiques). Si tu as d'autres points qui justifies de ne pas utiliser bcrypt avec des sources (promis j'arrête) pas de soucis, je me ferais un plaisir d'y répondre ou d'admettre que je me suis trompé ce qui arrive a peu près a tout les êtres humains sur terre.
Tu voulais un message arrogant le voilà.
la faille viens d'une dépendance : inflight@1.0.6 donc pour la résoudre ça demande d'avoir les compétences techniques pour comprendre comment fonctionne inflight, ce qui n'est pas évident, après les personnes qui gère le repo ont conscience du caractère relativement urgent de la faille donc il n'y a pas de sujet dramatique, il faut juste surveiller le repo (parce que oui une faille qui n'est pas traité rapidement peut empirer la situation et dans ce cas je rejoins @solemn abyss sur le caractère dangereux).
Si tu as d'autres question je peux essayer d'y répondre après comme je l'ai dis plus haut je ne suis pas expert, donc ce sera avec mes compétences et ce que j'ai lu, si tu veux vraiment avoir des réponses techniques je te conseille de lire l'issue :
https://github.com/kelektiv/node.bcrypt.js/issues/1053
Je te remercie de ta réponse !
Bon du coup je peux continuer à use bcrypt sur mes projets
Merci d’avoir surgit.
Joaquine est parti ?
Yep, on dirais qu’il a pas apprécié la conv :/
Je crois bien
Désolé pour le drama
C'est lui qui a commencé 🤓
T’avais raison de lui répondre en somme ce mec est constamment arrogant quand je relis ses messages (peine que j’ai pris hier soir)
Oui et non, oui c’est pas dangereux temps que tu distribue pas en masses et que tu n’es pas un géant de la tech ou un gouvernement mais tu ne devrais pas, l’anssi recommande d’éviter l’auth par mdp
Le mieux c’est des magic links non prédictibles ou un provider.
Si tu n’as pas le choix alors il faut de la double authentification et là oui bcrypt fait le taffe
Après c’est des projets d’étudiants pour le coup
C’est pas des gros trucs
Je me prétends pas développeur confirmé into full stack into frontend ou backend et tout le bordel
Rien de tout ça
Salut j'apprend le js est quelque chose m'intrige j'ai le meme code mais si je reload j'ai pas la meme réponse si quelqu'un peut m'expliquer ça serait cool
je change rien au code je refresh juste la page
Donc quand tu reload ça te change le texte qui est console log ?
A priori ça te log toujours le deniers li
Mais pour avoir que le texte c’est « li[0].contentText
Oui j’ai vu ça après dans la vidéo mais c’est bizarre quand même
Essaient
document.addEventListener("DOMContentLoaded", () => {
console.log(document.querySelector("#app"));
const li = document.querySelectorAll("li");
console.log(li[2]); // Devrait afficher le 3e <li>
});
C’est gpt ?
tu sais pourquoi avec la mm commande ça me log 2 trucs differents ?
Bah ça te log la même chose enfaite
Mais c’est juste que le premier log tu n’as pas tout les arguments
Ok merci
Et petite question c'est quoi le mieux entre les promises et les async/ await ou meme la différence j'ai du mal a la voir
Bonjour tout le monde, je cherche à faire une simple grid slider / grid caroussel, je ne sais pas bien comme cela s'appelle. Est-ce que quelqu'un pourrait m'aider ou connaîtrait une librairie permettant de le faire ? (comme flickty mais pour une grid par exemple)
Merci d'avance🙏
Utiliser async rend tas fonction asynchrone et renvoie une promesse sauf erreur de ma part on peut dire que c’est complémentaire plutôt que comparable
Merci
J'ai un soucis en TypeScript j'essaye de créer mon site internet sauf que quand je me créer un compte ça me met ça comme erreur An error occurred during sign up l'erreur est la suivante :
Signup error: Objectcode: "42501"details: nullhint: nullmessage: "new row violates row-level security policy for table \"users\""[[Prototype]]: Object signUp @ authStore.ts:90
j'utilise supabase si vous avez besoin de mes codes n'hésité pas
@molten monolith si y'a moyen que tu m'aide je suis preneur
est ce qu'on peut voir ton code où ce que te renvoie l'api ?
Je ne fait pas de front
enfaite le soucis viens du SQL par rapport au RLS policies
Sans code personne pourra t’aider
j'ai dit plus haut si on a besoin d'un de mes codes demandé moi mais dcp l'erreur vient de authStore.ts ligne 90 je t'envoie
Jai pas trop le temps de regarder ca, je disais ca parce que @pure tiger voulait t’aider
mais demain si jamais tas pas trouver de solution on peut en reparler
pas de soucis
C’est un probleme d’autorisation d’accès a user dans supabase ?
non c'est par rapport au RLS policy
FOR INSERT
WITH CHECK (auth.uid() = id);```
test ca
mais je comprend pas pourquoi tu veux utiliser un uid ?
Si t'as requête à des problèmes d'autorisation personnellement j'ai utiliser Security Definer à l'intérieur d'une fonction rpc sur Supabase pour donner la permission à une requête de s'executer sans utiliser la clé privée. Sinon tu dois gérer les permissions comme Snox te suggère, il y a aussi ce paramètre à prendre en compte
en gros pour que selon quand la personne créer son compte par exemple moi je créer mon compte en 1er j'aurais comme UID 1 , et le deuxieme UID 2 pour savoir ce qui sont la depuis le debut du projet
c'est déjà activé de base mais malgré l'aide de snox j'ai encore l'erreur
Tu as testé avec ta clé privée ? Juste pour voir si c'était une question d'autorisation
c'est a dire ? dans mon supabase.ts elle y est
import { createClient } from '@supabase/supabase-js';
const supabaseUrl = 'https://eahaxzzcxxxxxxxxxxwqmm.supabase.co';
const supabaseKey = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImVhaGF4enpjcWVsd2JiaGJ3cWxxxxxxxxxx';
export const supabase = createClient(supabaseUrl, supabaseKey);```
Je suis pas certains que ca soit la meilleure idée de montrer les clés et l'url en entier mais ok, c'est ta clé privée ou publique ?
la 1er
Essaye avec la clé privée plutôt ca te permettra de savoir si c'est une question de permission et que tu dois trouvé un moyen d'augmenter tes permissions pour cette requête
mais la push pas sur ton repo juste tu vérifies si ca fonctionne après tu l'enlèves
c'est a dire?
juste test apres enleve la
j'ai tester avec ma clé privé et cette fois j'ai plus une erreur de permission mais une autre erreur
Ca veut dire que déja y'a d'autres erreurs que la permission mais que tu vas aussi devoir donner la permission a ta requête d'accéder aux users dans supabase que ca soit avec Security Definer ou en modifiant les permissions de supabase pour ta clé publique
Tu essaye de te connecter la ?
Ou de t'enregistrer
Car la c'est une erreur de ta table users
oui j'ai essayé
mes requête sont la
Screen la ligne stp je suis sur tel
la ligne de?
90
Oui mes l'erreur vien du try juste au dessus en gros l'erreur s'affiche car l'erreur vient de ce qu'il y a dans le try juste au dessus
le try commence ligne 24
Bas faut que tu debug avec des console logs
Après chaque fonction tu mes un console.log et tu vois où ça casse
Created_at
C’est plutôt ça que tu dois utilisé vois ça comme un convention
j'ai déjà un created_at dans ma table user
Je ne connais pas assez supabase donc je pourrais pas plus t’aider
Du coup l’uid il ne sert pas vraiment
En gros ta inverse id et uid
si vue que le created_at ça m'aide pour ma page /account ou y'a des data depuis que la personne a créer son compte et le nombre de vue de profile
Après c'est supabase
ah merde
je suis sensé changer quoi?
-- Create users table
create table public.users (
id uuid references auth.users on delete cascade not null primary key,
email text not null unique,
username text not null unique,
uid bigint not null unique,
created_at timestamp with time zone default timezone('utc'::text, now()) not null
);
-- Enable Row Level Security (RLS)
alter table public.users enable row level security;
-- Create policies
create policy "Public profiles are viewable by everyone"
on public.users for select
using ( true );
create policy "Users can insert their own profile"
on public.users for insert
with check ( auth.uid() = id );
create policy "Users can update their own profile"
on public.users for update
using ( auth.uid() = id );
-- Create index for faster lookups
create index users_username_idx on public.users (username);
create index users_uid_idx on public.users (uid);```
Id en bigint et uid en uuid
Mes si jamais demain matin on peux check ça ensemble
pas de socuis
j'ai changer les eux et ça me dit invalid input syntax for type bigint: \"ebb73fa6-4748-4c3d-a547-69acb9029590\"
@molten monolith tu est dispo?
tien ```
ALTER TABLE users ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users can insert their own record" ON users
FOR INSERT
WITH CHECK (auth.uid() = id);
CREATE POLICY "Users can view own record" ON users
FOR SELECT
USING (auth.uid() = id);
CREATE OR REPLACE FUNCTION get_next_uid()
RETURNS TABLE (next_uid bigint)
SECURITY DEFINER
AS $$
BEGIN
RETURN QUERY
SELECT COALESCE(MAX(uid) + 1, 1) as next_uid FROM users;
END;
$$ LANGUAGE plpgsql;```
Merci , mais j'ai quand meme une erreur je deteste le sql
tjr le problème ?
pas le meme mais tujours des problemes avec le sql et mon authStore
dis moi tout
Alors j'utilise Supabase et la derniere erreur que j'ai eux c'est ça (screen) voici mon code (fichier) et voici mon sql ```sql
-- Create users table
create table public.users (
id bigint not null primary key, -- id en bigint
email text not null unique,
username text not null unique,
uid uuid references auth.users on delete cascade not null unique, -- uid en uuid
created_at timestamp with time zone default timezone('utc'::text, now()) not null
);
-- Enable Row Level Security (RLS)
alter table public.users enable row level security;
-- Create policies
create policy "Public profiles are viewable by everyone"
on public.users for select
using ( true );
create policy "Users can insert their own profile"
on public.users for insert
with check ( auth.uid() = uid );
create policy "Users can update their own profile"
on public.users for update
using ( auth.uid() = uid );
-- Create index for faster lookups
create index users_username_idx on public.users (username);
create index users_uid_idx on public.users (uid);
T’as un problème avec l’id que tu utilises, il n’existe pas dans la table des users
Hey, j’ai commencé mon projet en next mais j’ai quelques difficultés à structurer le rendu serveur et client au niveau dynamique tu aurais le temps dans le week-end pour m’orienter au niveau de l’archi?
pourtant il existe dans ma table
Ce n’est pas le fait d’avoir une colonne id, c’est dans ta table user dans la colonne id il n’existe pas d’id équivalent a celui que tu donnes
c'est a dire je doit changer quoi ici?
Tu dois vérifier que l'id (key) du message d'erreur existe dans ta base de donnée
ici sauf si tu essayes de crée l'utilisateur c'est différent
Si tu essayes de crée un utilisateur ca signifie que soit il manque une clé étrangère soit l'id n'a pas le bon type
Déja dans ton code je vois que ton id a un type string et dans ta bdd un type int8 ca me semble déja problématique
j'ai utilisé la méthode de facilité j'ai supprimé UUID
et ça marche nickel
Une personne qui a l’habitude de travailler avec next js serait disponible pour jeter un œil a mon projet voir si il y a des choses à améliorer au niveau de l’architecture essentiellement ?
yep, partages le repo !
Je peux pas de suite mais si tu es disponible fin d’aprem midi ou debut de soirée ? 😄 Si tas des compétences en responsive aussi parce que jai pas fais mobile first jai envie de m’arracher les cheveux 
Le repo est en pri-vé étant donner que c’est un petit projet pro mais on pourra voir ca ensemble avec un partage si ca te convient ?
?
ui
Je suis dispo si t'es chaud qu'on regarde
Salut il y a quelqu'un qui serait comment se connecter via RCON a un server FIVE M
désolé, j'ai pas trop eu le temps, mais tu peux m'ajouter au repo si tu veux et je regarderais
Je crois que ce n'est pas le bon salon
Pas de soucis, est ce que tu aurais le temps a un moment (n’importe) pour quon voit ensemble ? Ce sera mieux pour en discuter. La partie qui me pose le plus de difficultés c’est la séparation des responsabilités pour l’affichage dynamique c’est un peu confus entre le côté client et server + toutes les info mélange entre la manière page router et app router.. ca m’aiderait de ouf
@queen ocean tu t’y connais pas toi? 
nop déso
Tristesse
menteur 

add moi au repo et je regardes quand j'ai le temps
Hello, j'ai un problème avec mon app express, j'ai une page qui quand je vais dessus je me mange une redirection automatique et dans la console j'ai un code 302 mais je sais pas quoi faire pour le régler. Quelqu'un pourait m'aider ?
Tu as surement des redirections quelque part
J'ai tout regardé est non, je n'ai pas cette redirection, mais en plus mon code fonctionnait bien au début et quand je l'ai passé en prod il a pas kiffé du tout
Y’a forcément quelque chose. Le 302 sort pas de nulle part
Envoie la configuration de ton reverse proxy
Si t’en a pas envoie ton code
Apres pour sa défense c’est pour un framework particulier même si 
Je t’ai dis c’est pour un projet pro par éthique professionnel je préfère éviter et qu’on en parle ensemble ca sera plus bénéfique
La page qui cause l'erreur 302
const express = require('express');
const router = express.Router();
const db = require('../config/mysql/mysql');
const fetchData = require('../middleware/fetchData');
const auth = require('../middleware/auth');
// Fonction pour obtenir l'adresse IP
const getIp = (req) => {
const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress || req.socket.remoteAddress || null;
if(ip != null){
console.log(ip);
return ip;
}else{
console.log("chalut");
res.redirect('/home');
}
};
router.get('/', auth, fetchData, (req, res) => {
const userId = parseInt(req.query.userId);
console.log(userId + " = userID");
coinsParrainage = 200; // valeur en coins d'un parrainage
if(Number.isInteger(userId)) {
const ip = getIp(req);
const data = `SELECT wait_parrainage, wait_coins_parrainage FROM data_streamer_app WHERE id=?`;
db.query(data, [userId], (err, results) => {
if(err) throw err;
if(results < 1) {
res.redirect('/home');
}
let waitParrainage = results[0].wait_parrainage;
console.log("waitParrainage = " + waitParrainage);
let waitCoinsParrainage = results[0].wait_coins_parrainage;
waitParrainage += 1;
waitCoinsParrainage += coinsParrainage;
const UpdateBdd = `UPDATE data_streamer_app SET wait_parrainage=?, wait_coins_parrainage=? WHERE id=?`;
db.query(UpdateBdd, [waitParrainage, waitCoinsParrainage, userId], (err, results) => {
if(err) throw err;
res.redirect('/signin?parrainage=' + userId)
})
})
}
});
module.exports = router;
Mais par contre elle est pas explicite l'erreur je la vois quand dans la console, sur mon site sa me fait une redirection avec ?accessdenied sur une page de mon site
La méthode mvc qui pleure
Y en a pas du tout je connaissais pas avant que tu le site 😅
J’avais remarqué
mais renseigne toi c’est très utile
C’est juste une manière de poser son architecture (structure les dossiers et les logiques)
Yes je vois sa, mais la de toute façon je me rends bien compte que y a rien qui va dans mon organisation, mais du coup il me faut juste réussir à stabiliser ma version actuel et après j'essaierai d'améliorer tout sa
Qql peut m’aider svp ?
Et toi est-ce que tu peux aider quelqu’un à t’aider ?
Parce que là, mis à part supposer que c’est en rapport avec du JavaScript/typescript, ça va être compliqué
C’est à dire mettre mon probleme ?
Je ne sais pas comment régler le problème de « Embedbuilder is not defined »
Sauriez vous comme le régler ?
T’as copié collé un code nan ?
Un code d’un ami donc je ne sais pas
Ça se voit
😅
L’erreur est pour le coup plus qu’explicite. Je pense que tu voulais utiliser la classe EmbedBuilder de Discord.js, donc il faut que tu l’importe dans ton fichier 
Et comment faire cela svp ?
const { EmbedBuild } = require("discord.js") en haut de ton fichier
Mais le quel ?
….
Le fichier ou y'a ton code...
J’en ai plein
puissance4.js
Okk merci je test !
Même si bon c’est pas ta seule erreur j’en vois déjà une autre dans la console
J’aurais aussi un autre problème, je le citerais après
Citez tout ici si possible ! 
Oula problème
Si c’est pour repasser derrière un code pris sur Internet, et devoir corriger 40 erreurs en t’expliquant tout en détail parce que tu n’y connais rien, non merci. Je te conseille d’apprendre le JavaScript comme ça tu pourra résoudre les petits problèmes tout bêtes comme ceux-ci tout seul ^^
T’as rajouté un ` à la fin de ta ligne
Pour le coup y'a deux fois la librairie qui est appelée 😄
Je suis bête XD merci beaucoup
Je cite quand même l’autre problème ?
Enfin pas une erreur mais quelque chose que je ne sais pas modifier
Commence pas à lui emmêler les pinceaux….
C’est pas une bonne pratique mais tant que ça marche 
Je vous montre quelque chose d’autres ?
Nan mais une erreur hein pas un truc chelou @obtuse orchid
😂😂🥲
j'ai rien dit :p
Bonsoir, petite erreur qui a pop d'un coup :
require is not defined
J'ai voulu ajouter un module dans un fichier sauf que bah je sais pas pourquoi require() ne fonctionne plus

je suis pas sur d'avoir le temps de me poser
Bonsoir,
Je travaille sur un projet avec Express en TypeScript (PS: je suis nouveau en typescript). J'aimerais avoir un retour sur l'architecture actuelle du projet. Il n'y a pas encore beaucoup de code, mais je souhaite m'assurer que l'organisation est bonne et respecte les bonnes pratiques.
envoi un screen de l'architecture, tu utilise un framwork pour le front ?
non
okok, tu as un screen de l'architecture ?
je peux passer par message?
dommage que ce soit du express 😔
vzy
tu prefere nest ?
je fais très peu de back
mais de ce que j'ai pu voir et entendre, express, c'est pas forcément aussi fou que ça en a l'air
souvent adonisjs qui est conseillé
Yo y'a quelqu'un de tres chaud sur Excel pour me former un peu ?
en mode me donner quelque conseil et comment ça les chose marche vraiment
Pourquoi dans ce salon :')
je viens de debarquer sorry sorry
tkt
tu es bien avec excel ?
non :')
Si jamais express c'est un router là où adonis est un framework
hello, j'ai fait une auth avec discord pour mon projet nextjs (en utilisant nextauth) mais dans les datas de la session j'ai que avatar nom et email, vous savez comment je peut faire pour récupérer également le discord id de l'utilisateur ? je vais en avoir besoin pour récupérer ces rôles et autres informations
Plutôt l'inversion pour le coup :x
Ah :), effectivement j'avais pas fait gaffe à la diff
C'est-à-dire ?
Adonis n'est pas conseillé vis-à-vis d'express
Express c'est une tuerie, tu as a peu près la main sur tout, et c'est plus simple a mettre en place qu'un serveur natif node
express + ts et là c'est banger
lachez ça, faites plutôt du js lisibles
je fait les deux pour le coup 🤣
typescript c'est guez mais c'est ce que veut le marché
comment ça typescript c'esg guez
ça ajoute juste une surcouche de typage, ce qui est dans les faits plutôt cool
tu as tout dis, ça ajoutes une sur couche a un langages pour le faire fonctionner différemment, le concept je js c'est d'être permissif et non typé donc si tu le type (surtout faussement comme avec typescript) tu rajoutes juste une couche opaque qui est useless et non performante .
c'est ton pb si tu types faussement avec ts, en attendant je vois pas en quoi c'est non performant
ça compile en js
En gros type script derrière quand tu compile c'est du js donc dans tout les cas c'est intrinsèquement non typé autrement dis typescript ajoutes juste une couche de typecasting et de test, donc non ce n'est pas un vrai typage, la preuve ultime de ça c'est le "any"
le typage ça n'existe jamais lors du runtime execution
le typage c'est une surcouche compilateur
ça n'empêches qu'il compile un langage typé en non typé en rajoutant du typecasting partout
il y a aussi tout les problèmes de mutations de types qui peuvent amener a des bugs, en soit l'idée d'un langage typé n'est pas mauvaise, mais le problème est que typescript est faussement typé
en quoi y'a du typecasting partout si js n'est pas typé, je comprends pas bien là
pour avoir une compatibilité quasi parfaite, t'es obligé d'avoir du faussement typé avec js
sinon tu peux dire au revoir à certains packages js
ce qui est problématique quand on se veut être simplement une surcouche
vous réduisez typescript à une surcouche de typage mais vous oubliez que TypeScript ajoute de la doc implicite grâce au typage, la détection d'erreurs avant l'exécution (compile-time), gère parfaitement les interfaces, classes abstraites, énumération ect ce qui simplifie grandement les archi complexes, preuve en est les géant du marché passent tous à typescript (Google, Microsoft...), refactorisation
m'enfin bon
J'ai réduit à typage parce que tout ce que tu cites, rentre dans la catégorie du typage, mais oui ça ajoute beaucoup de choses implicitement
bah c'est l'idée, si tu veux faire du typé faut pas faire de js, surtout que je trouves la plus value du typage très très faible surtout que pour avoir ouvert beaucoup de repo typescript il y a beaucoup de typage un peu foireux. Le jour où il n'y aura plus de any et de ts-ignore là oui il y aura une plus value réel
la détection des erreurs oui ok, un bon linter le fait aussi ! ok, c'est un bon point la simplification des archi complexes, après est ce que ça aura encore du sens a l'avenir, maintenant qu'on essaie d'avoir des archi de plus en plus simples
et pour les grosses boites, il y a une dizaines d'années ils avaient investi dans php, il y a 15 ans dans flash, c'est pas pour autant que ça a été la réussite du sciècle
Vous pensez que j'ai une haine de typescript mais en vrai je kiffe le concept, je trouves juste la réalisation pas folle
c'est pas la réalisation qui est nulle à la limite
c'est les objectifs de ts qui ne te plaisent pas
je peux comprendre que ce soit frustrant le faiat qu'il y ait des any, des ts-ignore, des trucs du genre, mais dans les faits, c'est compliqué de faire sans pour tout supporter
ou alors faudrait retaper un .d.ts pour chaque package, sauf que certains packages ne veulent pas migrer visiblement
après ça devient de plus en plus un standard quand même le ts j'ai l'impression, donc on peut espérer que les bonnes manières en ts le deviennent aussi
le concept de typé c'est de tout typé, sinon tu perds l'intérêt du truc, donc pour moi c'est pas bon, j'entends que ce soit rude et pas évident de retaper certains types mais ça fait partie du jeu, et puis le nombre de fois où je vois des any, juste prcq un type a eu la flemme d'importer les types j'ai envie de mourir.
L'intérêt de typescript c'est le typage. Donc faut tout typer ou rien, mais pour moi ça n'a pas de sens de le faire a moitié. C'est pour ça que j'aimes pas. Mais oui c'est cool que les trucs soit de plus en plus typés. peut être qu'a terme je changerait d'avis
Hello, je reviens vers toi, je me disais si je fesait le login par des compte Microsoft ca ne serais pas plus simple et plus securisé ?
Bonsoir , j'ai un soucis j'ai un système de vérification par mail sur mon site grâce a supabase et resend sauf que quand je reçoit l'email de vérification (screen) ça ne mais pas celui que j'ai mis dans mon code savez vous comment régler ça ? et le deuxième screen c'est l'intégration de supabase sur resend
import { Resend } from 'resend';
const resend = new Resend('xxxxxxxx');
export const sendVerificationEmail = async (email: string, token: string) => {
const verificationUrl = `${window.location.origin}/verify-email?token=${token}`;
try {
await resend.emails.send({
from: 'Developer <@verification@osirus.fun>',
to: email,
subject: 'Verify your email address',
html: `
<div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;">
<h1 style="color: #9333ea;">Welcome to bios.lol!</h1>
<p>Please verify your email address by clicking the button below:</p>
<a href="${verificationUrl}"
style="display: inline-block; background-color: #9333ea; color: white;
padding: 12px 24px; text-decoration: none; border-radius: 12px;
margin: 20px 0;">
Verify Email
</a>
<p style="color: #666;">
If the button doesn't work, copy and paste this link into your browser:
<br>
${verificationUrl}
</p>
<p style="color: #666;">This link will expire in 15 minutes.</p>
</div>
`,
});
} catch (error) {
console.error('Error sending verification email:', error);
throw new Error('Failed to send verification email');
}
};
Ici, sur celle ligne : from: 'Developer <@verification@osirus.fun>',
Il y a deux "@", est-ce que cela est voulue ? Car cela pourrait causer l'erreur !
Sinon, parfois avec Resend, tu doit vérifier l'adresse avant que tu puisse utiliser pour envoyer des email.
@keen narwhal tu me diras si cela à bien fonctionner !
alors non ce n'es pas voulu je l'ai rajouté sans faire exprès mais sur mon site ce n'es pas l'erreur mais en gros le mail que ça envoie c'est le mail l'email template de supabase
elle est déjà verifier
Et cela ne regle pas le probleme ? Après avoir enlever le premier @, ca fait la meme chose ?
Sinon je ne sait pas ca pourrait etre quoi, tu pourrais essayer d'ajouter des console.log, tu pourrait voire si il log bien :
from: 'Developer <@verification@osirus.fun>',
to: email,
subject: 'Verify your email address',
console.log({
from: 'Developer <verification@osirus.fun>',
to: email,
subject: 'Verify your email address',
html: ... // TON HTML
});
mais en gros le soucis , ne vient pas de mon code fin il me semble pas ça envoie l'email template de supabase
Justement, si il ne comprend pas bien le email qu'il est supposer utiliser, il t'envoie le mail avec celui de base
Mais sinon, je ne sait pas ce que cela est, j'ai utiliser Resend une seule fois ! Désolée !
allo je suis nouveaux je veux faire minature de filme qul un peux me faire un cour photohops
avec le console.log ça ne change rien je n'ai aucune logs , mais dcp ça envoie toujours le meme mail de supabase
Bonjour des personne s'y connaissent en Oauth (avec next-auth) car la je seche niveau gestion des token et refresh token ?
Je m'explique : dans le cadre d'une auth avec discord j'aurais besoin de recupérer l'access token pour recuperer divers information (dans un premier temps savoir si l'utilisateur est present sur un certain serveur discord, ainsi que la liste de ces roles sur ce dit serveur, j'aimerais stocker ceci dans la session (un flag isInGuild(boolean) et roles (tableau de role) pour ce faire j'ai défini mes scopes lors de lauth et ceci fonctionne... je seche dans la récupération de maniére securisé de l'access token
En effet je souhaite que l'access token reste constamment dans le back (qu'il ne reviennent pas dans la session), mais je seche sur ceci...
Voici le code src/app/api/auth/[...nextauth]/route.ts
Je m'excuse par avance je test pas mal de chose alors celui-ci n'est vraiment pas clean et bien evidement le fetch de l'endpoint token ne restera pas la et les types any sont juste la le temps de faire fonctionner le code pour eviter que tout sois rouge dans l'IDE bien evidemment rien ne restera typer any 😅
import NextAuth from "next-auth";
import Discord from "next-auth/providers/discord";
import { checkIsInGuild } from "@/app/api/discord/guild";
const scopes = ['identify', 'email', 'guilds', 'guilds.members.read', 'guilds.join'];
export const authOptions = {
providers: [
Discord({
clientId: process.env.DISCORD_CLIENT_ID as string,
clientSecret: process.env.DISCORD_CLIENT_SECRET as string,
authorization: { params: { scope: scopes.join(' ') } },
})
],
callbacks: {
async jwt({ token, account }: any) {
if (account) {
token.refreshToken = account.refresh_token;
token.expiresAt = Date.now() + account.expires_in * 1000;
}
if (token.expiresAt && Date.now() > token.expiresAt) {
try {
const response = await fetch('https://discord.com/api/v10/oauth2/token', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: new URLSearchParams({
'client_id': process.env.DISCORD_CLIENT_ID as string,
'client_secret': process.env.DISCORD_CLIENT_SECRET as string,
'refresh_token': token.refreshToken,
'grant_type': 'refresh_token',
}),
});
const refreshedTokens = await response.json();
token.refreshToken = refreshedTokens.refresh_token;
token.expiresAt = Date.now() + refreshedTokens.expires_in * 1000;
token.accessToken = refreshedTokens.access_token;
console.log("access_token", refreshedTokens.access_token);
token.isInGuild = await checkIsInGuild(refreshedTokens.access_token);
} catch (error) {
console.error('Erreur de rafraîchissement du token', error);
}
}
return token;
},
async session({ session, token }: any) {
// Ajoute le flag isInGuild dans la session
console.log("token", token);
session.user.isInGuild = token.isInGuild || false;
return session;
}
},
secret: process.env.NEXTAUTH_SECRET,
};
const handler = NextAuth(authOptions);
export { handler as GET, handler as POST };
Bonjour des personne s'y connaissent en
Hey, j'ai un serveur five M j'arrive a me co en rcon avec icecon mais je souhaite me connecter avec une api fait avec express js j'utilise rcon-client mais quand je me co j'ai cette erreur : {
"error": "Failed to execute RCON command",
"details": "Connection closed"
}
et voici mon code:
import express from "express";
import { Rcon } from "rcon-client";
const prod = false;
const app = express();
const port = 3001;
let options = {};
// Middleware to parse JSON requests
app.use(express.json());
// Configuration for RCON
const rconConfig = {
host: "my.ip",
port: my.port,
password: "my.mdp",
timeout: 10000, // Increased timeout (10 seconds)
maxRetries: 3, // Retrying 3 times if the connection fails
autoReconnect: true, // Automatically reconnect if disconnected
};
// Endpoint to send RCON commands
app.get("/rcon", async (req, res) => {
const { command } = req.query;
console.log(command);
if (!command) {
return res.status(400).json({ error: "Command is required" });
}
try {
const rcon = await Rcon.connect(rconConfig);
console.log("Connected to RCON server.");
const response = await rcon.send(command);
console.log(`Command executed: ${command}`);
console.log(`Response: ${response}`);
rcon.end();
return res.json({ success: true, response });
} catch (error) {
console.error("RCON Error:", error);
if (error.message.includes("Connection closed")) {
console.error("Check if the server is configured to accept RCON connections.");
}
return res.status(500).json({ error: "Failed to execute RCON command", details: error.message });
}
});
// Start the Express server
app.listen(port, () => {
console.log(`Express server is running on http://localhost:${port}`);
});
Est-tu certain que le port est accessible de l'exterieur ?
Il se peux que certaine connections ne soit possible qu'en "interne" et ca pourrais causé ton soucis.
Pourrait on avoir plus d'informations sur comment tu as fait tes tests ?
Salut ! Je n’arrive pas à ouvrir quelque chose, et ça me met cela
at Client. ‹anonymous> (/home/containe
r/index.js:127:17)
at
Client.emit (node:events:529:35)
at MessageCreateAction.handle (/home/ container/node_modules/discord.js/src/cli ent/actions/MessageCreate.js: 26:14)
at module. exports las MESSAGE_CREATE! (/home/container/node_modules/discord.is /src/client/websocket/handlers/MESSAGE_CR
EATE• J5:4:32)
at WebSocketManager.handlePacket
C/ho
me/container/node_modules/discord.is/src/ client/websocket/WebSocketManager.js:346:
31
at WebSocketShard.onPacket (/home/con tainer/node_modules/discord.js/src/client /websocket/WebSocketShard.js:493:22)
at WebSocketShard.onMessage
(/home/co
ntainer/node_modules/discord.js/src/clien t/websocket/WebSocketShard.js:327:10
at calllistener (/home/container/node
_modules/ws/lib/event-target.js:290:14
at WebSocket.onMessage (/home/contain er/ node_modules/ws/lib/event-target.js:20
9:9) Promise {
‹rejected> TypeError: Cannot read
prope
rties of undefined (reading 'id')
at Object. execute
(/home/container/
utilities/help.js:18:50
at Client. ‹anonymous>```
Il semblerais que tu essaye de lire un id sur une variable qui n'est pas défini
J'ai fais mes test avec Icecon un outil permettant de ce connecter en RCON et ça à fonctionner ! mais avec mon api express ça ne fonctionne pas
Pourrais tu montrer le code ? il se peux que ce soit une mauvaise déclaration ou utilisation du Client
hello
j'ai un soucis sur mon code
j'essaye de réaliser un post avec mon fichier ReactJs
axios
.post("/api/fruit", {
name:"tomate",
price: 0.0,
})
.then((response) => this.props.navigate("/fruit/createFruitReact"))
.catch((error) => this.setState({ errors: error.response.data.errors }));
mais cela me cause une erreur de type Error 500
une idée de pourquoi ?
500 ces une erreur au niveau serveur. sa veut dire qu'il à lu ta requête, mais qu'il ne le traite pas pour des raisons incoonu :/
fait un test sur un outil d'api style postman pour voir si ton post fait bien la création d'un fruit
merci
en vrai y avait pas mal de problèmes/chosee incomplètes dans mon code, je suis en train de corriger là !
bon débuggage 😉
Yoo montre ton api
plus tard, je suis sur autre chose mtnt.
Mais merci bcp pour la proposition 🙂
Carré
Salut je débute en dev pour tout ce qui est web et j’ai créé un système simple qui envoie un mail a l’utilisateur après avoir renseigné son mail tout cela via Resend et enfaite j’aimerai envoyer dans ce mail un lien avec un token particulier donc relié au mail qui renvoie vers un formulaire à remplir ! Est ce que quelqu’un serait comment je peux réaliser ça ? Ce que je dois connaître pour y arriver afin que je me renseigne svp
Hello pour faire ça tu dois générer un token unique côté serveur, l’ajouter dans le lien que tu envoies avec Resend puis récupérer ce token dans ton formulaire via l’URL après pense à vérifier le token côté serveur pour sécuriser le tout regarde comment gérer les tokens et les paramètres d'URL, ça te mettra sur la bonne piste 
Merci à toi je regarde ça !!
Hello, sur next js je me demandait quelles sont les choses a mettre en rendu cote serveur et en cote client ? Je comprend que ca a un rapport avec la vitesse de chargement et la « lourdeur » de calcul ou autre mais jai du mal a vraiment faire une distinction claire. Si quelqu’un saurait m’orienter a ce sujet 
Si je ne dis pas de la merde, car je débute en nextjs aussi, mais il me semble que dès que tu utilises un hook React, c'est mieux de créer un composant avec 'use client'. Pour le reste, tu laisses sur le serveur, comme ça, ce n'est pas constamment rechargé. Il me semble à confirmer
qui veux faire survie
Bonjour !! 👋
Quand je fais une commande, une erreur se présente juste après quelqu’un pourrait m’aider svp ?
Je sais qu’il n’arrive pas à lire id ou un truc comme cela mais j’aimerais savoir comment je peux le régler ?
hello peut tu montrer ton code s'il te plait ?

Personnellement j’ai utilisé use client principalement sur mes composants et mes hooks, pour les fetch qui ne passe pas par supabase (ex: cree une route dans le dossier api et fetch cette route) aussi mais j’avoue que c’est du a peu pres mdrr
Bonjour! Je suis en train d’apprendre Vue et JavaScript. Cependant, lors de la création de mon site. J’ai rencontré un problème. Je crois que l’image dit tout… Le premier tag est plus épais que les autres mais pourtant, c’est exactement les même settings. Très gentils aux personnes qui m’aideront!

Hello 👋
Je suis entrain de faire mon portfolio en utilisant Astro, j'essaye de foutre une image sur mon header mais la console m'indique une erreur 404 quand je charge l'image sur le navigateur 😑
- mon fichier index.tsx dans /src/static/images :
import { type FC } from "react";
import LogoImage from "./logo.webp"; // CE LOGO DE MORT
import Preview from "./preview.webp";
import SvenImg from "./koray-img.webp";
import KorayComputer from "./koray-computer.png";
import Nike from "./nike.webp";
import Adidas from "./adidas.webp";
import Puma from "./puma.webp";
import Puma2 from "./puma-2.webp";
import Gsb from "./gsb.png";
export const images = {
logo: LogoImage,
preview: Preview,
svenImg: SvenImg,
korayComputer: KorayComputer,
nike: Nike,
adidas: Adidas,
puma: Puma,
puma2: Puma2,
gsb: Gsb,
};
type ImageProps = {
srcLocal?: keyof typeof images;
src?: string;
alt: string;
width?: number | string;
height?: number | string;
loading?: "lazy" | "eager";
};
/**
* @example
* <Image src="logo" alt="logo" width="50px" height="50px" />
*/
export const Image: FC<ImageProps> = ({
alt,
srcLocal,
height,
width,
src,
loading,
...rest
}) => {
/**
* If srcLocal or src is not provided throw an error
*/
if (!srcLocal && !src) {
throw new Error("srcLocal or src is required");
}
/**
* this component should be able to use local images or images from external sources
*/
const image = srcLocal ? images[srcLocal] : { src, width, height };
return (
<img
src={image.src}
alt={alt}
width={width ? width : image.width}
height={height ? height : image.height}
loading={loading}
{...rest}
/>
);
};
// default export of the images
export { Preview, Adidas, Nike, Puma, Puma2, Gsb, LogoImage };
- mon component qui affiche le logo :
import * as S from "./styled";
import type { FC } from "react";
import { Image } from "@static/images";
/**
* Logo is a text but if there is need to use img, add two img from <Image component
* @import
* @example
* import { Image } from "@static/images";
* <Image src="logo-light" alt="logo" data-theme-el="light" />
* when is light
* <Image src="logo-dark" alt="logo" data-theme-el="dark" />
*/
export const Logo: FC = () => {
return (
<S.LogoStyled>
<a href="/">
<Image src="LogoImage" alt="logo" data-them-el="light" />
</a>
</S.LogoStyled>
);
};
Tu lui demandes d'afficher une image en utilisant le chemin LogoImage. LogoImage n'a rien d'un chemin de fichier
Je pense que tu as voulu importer ton image dans ton composant et la stocker dans la variable LogoImage pour l'utiliser dans react mais tu n'as pas mis l'import dans le bon fichier et tu as passé src="LogoImage" comme une chaîne de caractère. Il faut passer ta variable comme ça : src={LogoImage}
Merci pour ton aide !
En relisant le code j'ai remarqué que y'avais src et srcLocal, en utilisant srcLocal il a pu retrieve mon logo en local :
J’fais pas de vue js mais faire un span pour chaque truc c’est pas très utile autant faire un tableau avec des dico dedans et ensuite tu fais un for each en parcourant ton tableau et en allant chercher les tags jsp si ces clair
Salut je dev un systeme permettant de mettre son mail afin de recevoir un mail avec un token qui nous est propre ( pas encore géré avec la bdd ) cependant j'ai une erreur dans mes log lors de mon redirect la voici . Le code est pas opti c'est juste pour avoir le principe je l'ameliorerai par la suite
je ne comprend pas ce que je fais de mal pourtant
Erreur : ``` Erreur: Error: NEXT_REDIRECT
at getRedirectError (......\src\client\components\redirect.ts:15:16)
at getRedirectError (......\src\client\components\redirect.ts:40:8)
at action (app\page.tsx:32:19)
13 | statusCode: RedirectStatusCode = RedirectStatusCode.TemporaryRedirect
14 | ): RedirectError {
15 | const error = new Error(REDIRECT_ERROR_CODE) as RedirectError
| ^
16 | error.digest =${REDIRECT_ERROR_CODE};${type};${url};${statusCode};
17 | return error
18 | } {
digest: 'NEXT_REDIRECT;push;/success;307;'
}```
Code :
import { resend } from "@/lib/resend";
import StripeWelcomeEmail from "../emails/Stripe";
import { redirect } from "next/navigation";
export default function Home() {
return (
<form
action={async (FormData) => {
"use server";
try {
const email = FormData.get("email") as string;
const response = await fetch(process.env.URL + `/api?email=${email}`);
if (!response.ok) {
throw new Error("Erreur lors de la récupération du token");
}
const data = await response.json();
const token = data.token;
const emailResponse = await resend.emails.send({
from: "onboarding@resend.dev",
to: email,
subject: "Confirmation d'inscription",
react: StripeWelcomeEmail({ token: token }),
});
if (emailResponse.error) {
throw new Error("Erreur d'envoi d'email");
}
redirect("/success");
} catch (error) {
console.error("Erreur:", error);
throw error;
}
}}
>
<div className="flex flex-col justify-center items-center h-screen">
<div className="flex flex-col gap-3">
<label>Email</label>
<input
name="email"
type="email"
placeholder="example@gmail.com"
className="px-1 rounded-sm border-white shadow-sm border-2 focus:border-blue-500 focus:shadow-blue-400 outline-0 text-gray-500"
/>
<button className="bg-indigo-500 rounded-md font-semibold">
Send mail
</button>
</div>
</div>
</form>
);
}
jcrois avoir compris c'est pas parce que j'utilise ça alors que j'ai "use server au dessus ? "
Juste «use server» ca se met tout en haut du fichier il me semble et par défaut Next execute ton fichier côté serveur y’a que si tu veux qu’il soit exécuté coter client que tu declare «use client»
J’crois ça peut aussi se mettre dans des fonctions imo
Mais tu penses c’est à cause de ça mon erreur ?
Je ne pense pas directement, c'est juste que en passant j'ai vu ca
Ok je ne savais pas que c'était possible merci de l'info 🙂
En revanche next prend par défaut l'ensemble d'un fichier en serveur tant qu'il est dans le dossier app du coup tu n'aurais pas besoin de le spécifier sauf quand tu souhaites que ca s'éxécute de coter client
Oui c’est vrai !
Bonsoir, je suis actuellement entrain de faire un bot discord pour lier mon serveur minecraft au bot pour avoir les informations en jeu avec JsonApi.
Je récupère correctement les informations json de mon serveur MC en console mais je n'arrive pas à récupérer les valeurs...
Si quelqu'un peut m'aider je suis preneur svp.
Console:
Réponse de l'API: [
{
result: 'success',
success: {
maxPlayers: 20,
worlds: [Array],
port: 25623,
players: [],
name: 'Paper',
serverName: 'Paper',
version: 'git-Paper-399 (MC: 1.17.1)'
},
source: 'getServer',
is_success: true
}
]
test [
{
result: 'success',
success: {
maxPlayers: 20,
worlds: [Array],
port: 25623,
players: [],
name: 'Paper',
serverName: 'Paper',
version: 'git-Paper-399 (MC: 1.17.1)'
},
source: 'getServer',
is_success: true
}
]
test2 undefined```
Bonsoir je viens de débuter React.js j'aurais besoin de cours en pdf svp
Prend la doc ça fait le taff en vrai
Petite question c’est quoi la meilleur architecture pour un projet en nextjs et en React ?
Bonjour, je possède un soucis sur mon site portfolio, je voudrais mettre en place un formulaire de contact en utilisant NodeMailer
Mon projet Nextjs est en app Router et j'obtient une erreur 405 Method Not Allowed
Avec le
/api/emails/send-email.js
import nodemailer from 'nodemailer';
console.log("send-emails.js API handler is loaded");
export default async function handler(req, res) {
if (req.method === 'POST') {
const { from, subject, message, nameFrom, phone } = req.body;
let transporter = nodemailer.createTransport({
host: process.env.EMAIL_HOST,
port: process.env.EMAIL_PORT,
secure: false,
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_PASSWORD,
},
});
try {
let info = await transporter.sendMail({
from: from,
to: process.env.EMAIL_USER,
subject: "Portfolio - Nouveau message: " + subject,
text: `Name: ${nameFrom}\nPhone: ${phone}\n\n${message}`,
});
console.log("Message sent: %s", info.messageId);
res.status(200).json({ success: true, message: "Email sent" });
} catch (error) {
console.error("Error sending email: ", error);
res.status(500).json({ success: false, message: "Email not sent", error });
}
} else {
res.status(405).json({ success: false, message: "Method not allowed" });
}
}
Et le components Contact.jsx dans :
/components/items/Contact.jsx
https://pastebin.com/7ib3n04Q
Merci de me ping quand vous me repondez
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
peut-être que faut faire une requête POST du coup ?
et faudrait aussi utiliser la fonction "next()", troisième paramètre après req, res
pour faire passer la suite des autres routes
si tu veux pas tout bloquer
à la place de ```tsx
res.status(405).json({ success: false, message: "Method not allowed" });
tu met ```ts
next()
import nodemailer from 'nodemailer';
console.log("send-emails.js API handler is loaded");
export default async function handler(req, res, next) {
if (req.method === 'POST') {
const { from, subject, message, nameFrom, phone } = req.body;
let transporter = nodemailer.createTransport({
host: process.env.EMAIL_HOST,
port: process.env.EMAIL_PORT,
secure: false,
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_PASSWORD,
},
});
try {
let info = await transporter.sendMail({
from: from,
to: process.env.EMAIL_USER,
subject: "Portfolio - Nouveau message: " + subject,
text: `Name: ${nameFrom}\nPhone: ${phone}\n\n${message}`,
});
console.log("Message sent: %s", info.messageId);
res.status(200).json({ success: true, message: "Email sent" });
} catch (error) {
console.error("Error sending email: ", error);
res.status(500).json({ success: false, message: "Email not sent", error });
}
} else {
// res.status(405).json({ success: false, message: "Method not allowed" });
next()
}
}
Et puis si ça t'affiches GET /(je sais pas) not found c'est que tu ne fais pas une requête POST
J'ai toujours la meme erreur
Attends je regarde ton pastebin
Ok je vois enlève le next et remet comme c'était, met un console.log() pour afficher ce que tu veux envoyer, les paramètres
ça se trouve c'est en lien avec la requête nodemailer qui fait crash le handler
en parallel du
res.status(405).json({ success: false, message: "Method not allowed" });
``` ?
Oui remet ça comme c'était avant, et puis tu met un console.log(res.body)
en premier
Ou alors, montre les logs de ta console côté navigateur
L'erreur
⨯ Detected default export in '[project]/src/app/api/emails/send-email/route.js'. Export a named export for each HTTP method instead.
⨯ No HTTP methods exported in '[project]/src/app/api/emails/send-email/route.js'. Export a named export for each HTTP method.
Mmmh, et ton handler il est appelé où ?
Le submit ?
non comment il est géré côté serveur ?
ça c'est côté serveur ton erreur ?
yep
et côté navigateur ?
active aussi l'option show XMLHTTPRequest
pour montrer les requêtes
Log*
ça doit montrer des trucs de ce style
POST URL etc
'fin plutôt ça
Cest la route
et Contact.jsx:45 ?
Je crois que le problème c'est que Nextjs n'arrive pas à register ton handler
ah si
console.error("Error:", error);```
merci beaucoup ça m'aide bcp
Pourquoi pas utiliser resend ? @shy hazel
resend ?
(je m'y connais en API mais pas forcément en Nextjs hein)
(donc je fais ce que je peux)
C'est pas grave merci beaucoup de l'aide ça donne tjrs des pistes qui peuvent mener a la résolution
https://resend.com
avec react mail
essaie de mettre ça en minuscule
C’est POST il me semble c’est mieux en maj
oui
mais ça dit que req.method === "POST" est à false
vu que le else renvoit toujours Method not allowed
Essaie resend ca prend 2 sec à mettre en place et franchement t’as un bon suivi des mails après si ta méthode marche garde la !
Je vais me renseigner après je t'avoue que je voulais pour une fois eviter d'utiliser des services externes
nop pour l'instant il est en local
oui c'est ce que j'ai fait mais rien ne c'est afficher
outre ça du coté serv
send-emails.js API handler is loaded
⨯ Detected default export in '[project]/src/app/api/emails/send-email/route.js'. Export a named export for each HTTP method instead.
⨯ No HTTP methods exported in '[project]/src/app/api/emails/send-email/route.js'. Export a named export for each HTTP method.
dans la console de ton serveur
dcp j'ai tenté dans la console 😅
oui et est-ce que du coup tu as fait la requête sur send-emails.js ?
Pour avoir un message ?
dans la console du serveur ?
T’es sur quel version de nextjs ?
oui mais rien ne c est afficher outre le
⨯ Detected default export in '[project]/src/app/api/emails/send-email/route.js'. Export a named export for each HTTP method instead.
⨯ No HTTP methods exported in '[project]/src/app/api/emails/send-email/route.js'. Export a named export for each HTTP method.
Alors ça c’est pour le middleware pas pour les routes
mais ça ressemble pas à un route
je l ais retirer ça me mets
⨯ No HTTP methods exported in '[project]/src/app/api/emails/send-email/route.js'. Export a named export for each HTTP method.
Tu dois export GET ou POST
Oui voilà
next 15.1
// route.ts/route.js
export async function POST(request: Request) {
await handler(request)
}
Si tu utilises l’ia il utilise l’ancienne version qui ne marche plus
Oui
appel le handler quand tu exporte POST
Ca c'est piur du typescript
bah ça alors:
// route.js
export async function POST(request) {
await handler(request)
}
et du coup t'as pas besoin de vérifier si c'est du POST dans ton
Par contre jsp comment fonctionne le système de réponse
Quand tu veux envoyer une réponse tu fais ça
import {Response} from "je sais pas"
import nodemailer from "nodemailer";
console.log("send-emails.js API handler is loaded");
export async function POST(req) {
const { from, subject, message, nameFrom, phone } = req.body;
let transporter = nodemailer.createTransport({
host: process.env.EMAIL_HOST,
port: process.env.EMAIL_PORT,
secure: false,
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_PASSWORD,
},
});
try {
let info = await transporter.sendMail({
from: from,
to: process.env.EMAIL_USER,
subject: "Portfolio - Nouveau message: " + subject,
text: `Name: ${nameFrom}\nPhone: ${phone}\n\n${message}`,
});
console.log("Message sent: %s", info.messageId);
return new Response(
{ success: true, message: "Email sent" },
{ status: 200 }
);
} catch (error) {
console.error("Error sending email: ", error);
return new Response(
{ success: false, message: "Email not sent", error },
{ status: 500 }
);
}
}```
AH
ton handler est dans route.js ?
bah apparement oui mdr
Bon
Export async function POST(req,res) {
Ta gestion d’appel
Ici tu gères ton envois de mail
}
Désolé je suis sur téléphone
Ok
tkt pas
et le Post faut l'importer non ?
À la fin tu fais return new response commme a envoyé @high raptor, tu dois importer response
Non c’est un nom de fonction
ah oui chuis con mais dcp dans le contact.jsx est ce que je dois modifier un truc ?
ça m'embrouille
t'as mis res du coup j'ai tout modifié
Le res n’est pas nécessaire enfaite
Je suis desoler je dois faire un truc je reviens dans l'aprem si vous voulez bien
je vois pas où on l'importe le Response
D'ac pas de pb
Merci bcp en tout cas j'ai l'air d'avoir un réponse je vous transfert tout ca dans l'aprem
import nodemailer from "nodemailer";
console.log("send-emails.js API handler is loaded");
export async function POST(req) {
const { from, subject, message, nameFrom, phone } = req.body;
let transporter = nodemailer.createTransport({
host: process.env.EMAIL_HOST,
port: process.env.EMAIL_PORT,
secure: false,
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_PASSWORD,
},
});
try {
let info = await transporter.sendMail({
from: from,
to: process.env.EMAIL_USER,
subject: "Portfolio - Nouveau message: " + subject,
text: `Name: ${nameFrom}\nPhone: ${phone}\n\n${message}`,
});
console.log("Message sent: %s", info.messageId);
return Response.json(
{ success: true, message: "Email sent" },
{ status: 200 }
);
} catch (error) {
console.error("Error sending email: ", error);
return Response.json(
{ success: false, message: "Email not sent", error },
{ status: 500 }
);
}
}
En faite Response est utilisé par Nextjs nativement
Response est celui natif
Salut mon gars en app router les routes handler ont le name convention "route.js", donc ça devient /api/emails/route.js et ton endpoint devient localhost:3000/api/emails
Bonsoir le message s'envoie bien en théorie ça me mets un code 200 (message sent) mais rien dans la boite mail
Ah si j'ai rien dis
mais dnas le mail c'est comme ça
fait un console.log(req.body) côté serveur pour voir si y'a bien les options
dans la console serveur j'ai rien et dans la console web j'ai rien
le seul truc que j'ai c'est dans le network dans le payload ou les données sont bien envoyer
c'est que ça doit pas récup bien les données du formulaire
Je ne vois pas dutout ou est le problème dans la récup des datas
Ah si ça le fait bien
ça a affiché quoi quand tu as fait un console.log(req.body) ?
undefined ?
{} ?
Coté serveur ça me mets ça
ReadableStream { locked: false, state: 'readable', supportsBYOB: true }
Message sent: 0caf7dbe-95d5-1df3-a195-0ad881c6abcc@localhost
ça mets []
bah voilà, le serveur ne récup rien
const res = await fetch("/api/emails/send-email", {
method: "POST",
body: formData,
});
Essaie ça
dans ton client
tjrs []
const data = new URLSearchParams(new FormData(formElement));
const data = new URLSearchParams(formData);
coté client ?
tjrs le []
Côté client fait un console.log(formData) avant d'envoyer le formulaire
là data n'est pas utilisé
et faut le mettre dans handleSubmit
const handleSubmit = async (e) => {
e.preventDefault();
try {
console.log(formData)
const res = await fetch("/api/emails/send-email", {
method: "POST",
body: new URLSearchParams(formData),
});
if (!res.ok) {
throw new Error(`Network response was not ok: ${res.status} ${res.statusText}`);
}
const data = await res.json();
if (data.success) {
alert("Email sent successfully!");
} else {
alert("An error occurred while sending the email: " + data.error);
}
} catch (error) {
console.error("Error:", error);
alert("An error occurred while sending the email: " + error.message);
}
};
ça me mets [] et Message sent: 5dcbf40a-73ae-3c1c-59eb-114a75710870@localhost
dois je remplacer le console.log(formData) par console.log(Object.keys(formData))
ah bah enfaite meme en modifiant ça fonctionne pas
côté client formData fait [] ?
ok c'est un Objet, parfait,
si tu met formData dans body sans le JSON.stringify ça fonctionne ou pas ?
il y est pas la
const formData = await request.formData()
const nameFrom = formData.get('nameFrom')
const phone = formData.get('phone')
essaye ça dans ton route handler
ah bah ça se trouve ça fonctionne ça
Ok enlève le new URLSearchParams
route.js
export async function POST(req) {
const formData = await request.formData()
const from = formData.get('from')
const subject = formData.get('subject')
const message = formData.get('message')
const nameFrom = formData.get('nameFrom')
const phone = formData.get('phone')
let transporter = nodemailer.createTransport({
host: process.env.EMAIL_HOST,
port: process.env.EMAIL_PORT,
secure: false,
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_PASSWORD,
},
});
...
500 Internal Server Error
ton code est pas sur github?
nop sry
parce que l'erreur n'a plus rien a avoir là
sa variable formData est un Objet pas un FormData
ça veut dire ?
c'est différent
ton Objet c'est du JSON alors que le FormData c'est autre chose comme il ta montré avec le formData.get("etc")
ah dac
ah ouais, je pensais que tu utilisais les actions vu que ton state s'appelle formData
where ?
export async function POST(req) {
const { from, subject, message, nameFrom, phone } = await req.json()
...
dans ton route.js
ah oui ok
Coté serveur ça me mets :
SyntaxError: "[object Object]" is not valid JSON
at JSON.parse (<anonymous>)
⨯ unhandledRejection: SyntaxError: "[object Object]" is not valid JSON
at JSON.parse (<anonymous>)
⨯ unhandledRejection: SyntaxError: "[object Object]" is not valid JSON
at JSON.parse (<anonymous>)
J'ai peut-être une solution
Dans ton route.js:
export async function POST(req) {
const { from, subject, message, nameFrom, phone } = JSON.parse(await req.text())
...
et puis dans ton client :
const handleSubmit = async (e) => {
e.preventDefault();
try {
console.log(formData)
const res = await fetch("/api/emails/send-email", {
method: "POST",
body: JSON.stringify(formData),
});
...
⨯ SyntaxError: "[object Object]" is not valid JSON
at JSON.parse (<anonymous>)
at POST (src/app/api/emails/send-email/route.js:7:61)
5 |
6 | export async function POST(req) {
> 7 | const { from, subject, message, nameFrom, phone } = JSON.parse(await req.text())
| ^
8 |
9 |
10 |
POST /api/emails/send-email 500 in 191ms
et côté client t'as un message ? par rapport au console.log(formData) ?
juste 500 Internal Server Error
met console.log(formData) avant try {
...
}
oui atta
const handleSubmit = async (e) => {
e.preventDefault();
console.log(formData)
try {
const res = await fetch("/api/emails/send-email", {
method: "POST",
body: JSON.stringify({...formData}),
});
...
500 (Internal Server Error)
⨯ SyntaxError: "[object Object]" is not valid JSON
at JSON.parse (<anonymous>)
at POST (src/app/api/emails/send-email/route.js:7:61)
5 |
6 | export async function POST(req) {
> 7 | const { from, subject, message, nameFrom, phone } = JSON.parse(await req.text())
| ^
8 |
9 | let transporter = nodemailer.createTransport({
10 | host: process.env.EMAIL_HOST,
enlève le JSON.stringify et garde body: {...formData}
et ça
si ça fonctionne tjrs pas côté serveur tu remplaces JSON.parse(await req.text()) par await req.json()
SyntaxError: "[object Object]" is not valid JSON
at JSON.parse (<anonymous>)
⨯ unhandledRejection: SyntaxError: "[object Object]" is not valid JSON
at JSON.parse (<anonymous>)
⨯ unhandledRejection: SyntaxError: "[object Object]" is not valid JSON
at JSON.parse (<anonymous>)
Message sent: <fbfa03d0-08da-bcc4-9f76-37f0a8eae17b@localhost>
POST /api/emails/send-email 200 in 1363ms
mais ça s'arrête pas bruh
remet ça
et garde le serveur tel quel
Ok... alors on va vérifier un truc, je pense voir le problème mais je ne sais pas convertir un Object en JSON pur
console.log(typeof formData) côté client
avant le try ?
const handleSubmit = async (e) => {
e.preventDefault();
console.log(formData, typeof formData, formData instanceof Object)
try {
const res = await fetch("/api/emails/send-email", {
method: "POST",
body: JSON.stringify({...formData}),
});
...
Oui
et ça
tjrs pareil
Ok si ça fonctionne pas essaie de remettre le header headers: {
"Content-Type": "application/json",
},
const handleSubmit = async (e) => {
e.preventDefault();
console.log(formData, typeof formData, formData instanceof Object)
try {
const res = await fetch("/api/emails/send-email", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({...formData}),
});
...
ça veut même pas dire si formData est de type "object" ou est une instance de Object ?
il envoit tjrs la meme chose
contact.jsx
const handleSubmit = async (e) => {
e.preventDefault();
try {
const res = await fetch("/api/emails/send-email", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(formData),
});
if (!res.ok) {
throw new Error(`Network response was not ok: ${res.status} ${res.statusText}`);
}
const data = await res.json();
if (data.success) {
alert("Email sent successfully!");
} else {
alert("An error occurred while sending the email: " + data.error);
}
} catch (error) {
console.error("Error:", error);
alert("An error occurred while sending the email: " + error.message);
}
};
route.js
export async function POST(req) {
const { from, subject, message, nameFrom, phone } = await req.json()
...
⨯ SyntaxError: "[object Object]" is not valid JSON
at JSON.parse (<anonymous>)
at async POST (src/app/api/emails/send-email/route.js:7:56)
5 |
6 | export async function POST(req) {
> 7 | const { from, subject, message, nameFrom, phone } = await req.json()
| ^
8 |
9 | let transporter = nodemailer.createTransport({
10 | host: process.env.EMAIL_HOST,
POST /api/emails/send-email 500 in 181ms
côté client avant le try
console.log(JSON.stringify(formData))
côté serveur :
console.log(await req.text()) console.log(await req.json())
ou dans le srv ?
?
Mmmh
contact.jsx
const handleSubmit = async (e) => {
e.preventDefault();
try {
const res = await fetch("/api/emails/send-email", {
method: "POST",
body: new URLSearchParams([...new FormData(e.target).entries()]),
});
if (!res.ok) {
throw new Error(`Network response was not ok: ${res.status} ${res.statusText}`);
}
const data = await res.json();
if (data.success) {
alert("Email sent successfully!");
} else {
alert("An error occurred while sending the email: " + data.error);
}
} catch (error) {
console.error("Error:", error);
alert("An error occurred while sending the email: " + error.message);
}
};
500 Internal Server Error
⨯ SyntaxError: "[object Object]" is not valid JSON
at JSON.parse (<anonymous>)
at async POST (src/app/api/emails/send-email/route.js:7:56)
5 |
6 | export async function POST(req) {
> 7 | const { from, subject, message, nameFrom, phone } = await req.json()
| ^
8 |
9 | let transporter = nodemailer.createTransport({
10 | host: process.env.EMAIL_HOST,
POST /api/emails/send-email 500 in 128ms
le await annule tout
fait un console.log(req)
est-ce que tu utilises VSCode ?
oui
Ok fait req. et montre moi tout ce qui existe en propriété / methodes
dans la console ?
t'as rien qui s'affiche
Oui mais t'as pas l'intelisense là
t'es sur que t'as écrit ça dans la fonction POST ?
route.js
console.log(req.body)
const { from, subject, message, nameFrom, phone } = await req.json()
...
bah dans le console.log
...
fallait pas ?
genre t'as fait console.log(req. et puis t'as screnshot ?
le await fait crash
mais où ?
euh oui 😅
est-ce que ça affiche le req.body dans la console ?
bah lors du send
ça c'est quand et dans le code...
ReadableStream { locked: false, state: 'readable', supportsBYOB: true }
fait console.log(await req.body.json())
⨯ TypeError: req.body.json is not a function
at POST (src/app/api/emails/send-email/route.js:7:29)
5 |
6 | export async function POST(req) {
> 7 | console.log(await req.body.json())
| ^
8 | const { from, subject, message, nameFrom, phone } = req.json()
9 |
10 | let transporter = nodemailer.createTransport({
POST /api/emails/send-email 500 in 169ms
```
Hmm ok att
const { from, subject, message, nameFrom, phone } = JSON.parse(JSON.stringify(req.text()))
console.log(JSON.parse(JSON.stringify(req.text())))
⨯ unhandledRejection: TypeError: Body is unusable: Body has already been read
at POST (src/app/api/emails/send-email/route.js:8:84)
6 | export async function POST(req) {
7 | console.log(JSON.parse(JSON.stringify(req.text())))
> 8 | const { from, subject, message, nameFrom, phone } = JSON.parse(JSON.stringify(req.text()))
| ^
9 |
10 | let transporter = nodemailer.createTransport({
11 | host: process.env.EMAIL_HOST,
Message sent: <07976bba-0c6c-3114-fe5e-032712eefdda@localhost>
POST /api/emails/send-email 200 in 2187ms
ahh, bon bah je pense faire une pause, tu peux voir si d'autres gens veulent t'aider
pas de soucis merci
Problème Résolu ! Finalement j'ai utiliser le FormData de NextJS comme KAM avait parler
salut tlmd j'essaye d'installer javascipt sur visual sa me mets ça j'ai essayer de chercher j'ai toujours pas résolu le problème
cliques sur le lien dans l'erreur, ils te donnent la commande powershell
azy
https://go.microsoft.com/fwlink/?LinkID=135170 je comprends rien
En gros tu dois exécuter une de ces commandes pour modifier les permissions de ton shell. Apparemment la commande est : set-executionpolicy unrestricted. (Je n’ai pas vérifié a 100%)
Ps: fais attention cela peut permettre d’exécuter des scripts malveillants renseigne toi pour une configuration optimale a tes besoins.
oe tkt
ba je vais coder en py pas grave merci quand même
Set-ExecutionPolicy RemoteSigned tente celle la
Envoie lerreur
Tu dois mettre oui
ok mais les scripts télécharger devront être signés genre si je prends un non signé sa sera refusé c'est ça ??
Oui avec remoteSigned tu peux exécuter des scripts locaux sans signature mais les telecharge devront être signes
sa me soule
j'ai pas de chance c'est une dinguerie
même en écrivant o sa marche pas
même comme ça sa marche pas
Dans ce cas fait entrer en selectionnant le oui en jaune avec les fleches du clavier si c possible
Reexecute la commande si le oui est en jaune et que tu fais entree ca devrait fonctionner
sa fait en jaune mais tjrs pas
Envoie un screen pour voir
Non faut pas marquer oui, mais presser entrer si le oui de la commande est sélectionné. Normalement avec les flèches du clavier tu peux faire gauche droite et selectionner une réponse
Envoie lerreur tjrs
win11 pire os actuel c'est bon ou pas
Lance la commande set-policy et directement press o une fois que le message de réponse apparaît ca devrait passer
vasy
Tas juste mis oui en premier ce qui a annuler la commande puis tu as mis « o » mais sans relancer le commande donc tu las fais dans le vide
Non mais la commande en entiere mdrr
nn j'ai retaper la commande
de quoi
Bh c’etait set-policy remoteSigned quelque chose comme ca pas juste set policy
Puis tappuies sur o
que je mettes juste set policy ou pas il veut tjrs pas ce fdp
java il est galère à coder comme il est galère à installer c'est grv
La pour le coup c’est toi qui arrive pas a taper la ligne de commande correctement 
j'ai copier coller
Je tai envoyer sur le screen la commande que tu as mise deja et qui avait fonctionné
elle marche mais pour valider sa marche pas
Une fois que tu as lancer la commande et quils te posent la question juste tu press o
Envoie le screen voir
le o après les deux points
Normalement une fois que tas cette question soit tu fais o soit tu fais t soit tu utilise les fleche tu sélectionnes oui avec et tu press entrer
Je peux pas plus t’aider apres ca dsl
je suis pas fou j'ai tout fais
en relancer shell pleins de fois tjrs rien
là c'est powershell qui à un problème mais pas moi là
c'est pas un programme qui va m'amener à l'HP
merci quand même
Là normalement une fois que tas fais la première commande il reste plus qua valider la réponse et ton pb est regler jte ment pas je galere pas autant sous win11 pour exécuter une commande 
les flèches sa marchent pas
Les flèches c’est possible que ca marche pas
Mais le o ou le t est censé etre valide
Essaye un O majuscule sait on jamais si la nuance est importante si tu peux filmer aussi comme ca je vois c cool
Ou le T
Ok je crois que
Tu as déjà régler ton problème
Enfaite quand tu met le premier O
Il te renvoie rien juste il te dit de tapee une nouvelle commande
Je pense que il le prend en compte mais sans te le dire
ah oe mais du coup node.js devrait marchais
MDRR pas de soucis bg maintenant tu peux développer en paix (jusqu’au prochaine erreur
)
j'ai la tête qui tourne ptn sa marche après 3h les problèmes débiles je galère sa à aucun sens dans mon cerveau
t'es un génie jsp créer minecraft 2 avec java jsp mais fait un truc
je code demain là je vais bien dormir grâce à toi
C’est normal si tu débutes puis ils auraient pu mettre un petit retour pour confirmer lol mais dis toi que quand tu lances une commande et que ya pas d’erreur il s’est passer qlq chose meme si ya pas de message
Ahaha my dream mais bon j’ai aussi mes obstacles 
moi j'attends tjrs un retour de confirmation mais comme on est sur windows ba nn
c'est vrai qu'un jeu c'est chaud de fou
Deja je dois faire un mini jeu ou ya des murs une trap et des joueurs une sorte de puzzles game très simplifié en full POO c’est pas forcément évident alors minecraft on va attendre un peu 
surtout que minecraft à un codage hyper complexe avec les taux de spawns, seeds de maps et tout
markus jsp ce qu'il avait comme maladie pour réussir à coder ça
c'est pas un humain normal
Tout est dans la conception et la compréhension des concepts une fois que tu t’es suffisament exerce ca devient de plus en plus naturel
Mai clairement au premier abord c’est impressionnant
et oui
Mais bon c’est ce qui rend le métier intéressant je trouve. Il y a toujours possibilité de faire mieux et d’en apprendre plus
surtout qu'avec les connaissances tu fais ce que tu veux
Aussi t’as un potentiel de création incroyable
déjà juste excel et word tu finis banquier, pas rotschild non plus, alors avec java et le reste laisse tomber
tu créer des applications, mods, jeu tout quoi
Clairement apres ça demande beaucoup d’effort mais ca en vaut la peine
sur Tor y'a des jeux créer par des dév ils ont un niveau c'est une dinguerie
y'a des mods gta 5 à san francisco genre ils ont importé la map watch dogs 2 sur gta 5
par contre le pc qu'il faut minimum 3k la config
Mdrr yen a ils sont deter
Bonjour, j'ai été très occupé mais me revoila, j'ai fais mes test grace a icecon donc j'ai mis toute les infos du serveur et ensuite j'ai fais un commande et ça répond correctement mais du coup quand je fais ma connexion avec rcon depuis mon express j'ai une erreur
Je me dis donc que si ça fonctionne avec icecon alors qu'il ne s'agit pas de mon serveur cela doit fonctionner avec une api express
Effectivement ça devrais fonctionner, peut être la nécessité d’avoir un certificat ssl local pour appeler le serveur distant, je pourrais regarder au besoin après les fêtes si tu ne trouve pas
salut tout le monde j'ai créé un bot en .js et quand je le démarre sur render avec uptimerobot il se déco au bout de 10 à 15 minutes pour un problème de port, quelqu'un serait ou faut règler l'erreur
🤮 windows 🤮
Kali perso 🙋
D’accord dark patato
chacun ses goûts 
Salut tout le monde !
Je vous explique la chose que je veut faire :
- Premièrement, sur mon site il y a un fichier .js : Exemple :
const number = 0
- Je souhaite modifier le fichier admettons, je demande à l'utilisateur "Nombre". Il rentre un nombre du genre 1. ça lui télécharge le fichier :
const number = 1
mais sur mon site le fichier reste :
const number = 0
Comment puis-je faire pour intégrer ce système à mon site ? Merci !
-# ps: si vous avez le temps de m'expliquer comment mettre en .zip mon fichier après, je suis preneur ;).
Je ne fais pas de JS mais par contre si tu veux je peux t'aider à mettre ton fichier en .zip
yes, je suis preneur 🙂
Est ce que tu peux me dire qu’est ce que tu veux compresser ? Tout ton projet ou juste 2/3 fichier dans ton projet ?
Il faut formater ton texte via un script externe
Tu fais un fichier template avec const number = {{number}}
Et ensuite ton script va chercher {{number}} et remplacer par la valeur saisie par l'utilisateur
d'accord merci
dedans, il doit y a voir 2 fichier et plusieurs dossiers
Bonsoir, je rencontre un problème sur "dataTransfer" sur un event "drop" il lit bien que je drop un files, mais il ne le prend pas en compte, comment je peux régler cela ?
C'est une liste de fichiers (array) donc il faut boucler sur e.dataTransfer.files
let files= e.dataTransfer.files
files.forEach(file => {
)};
@delicate mica
Yo alors ce n'est pas vraiment un souci, mais si quelqu'un serait éclairé ma lanterne mdr
Alors en gros j'ai un slider CSS "infinie" qui n'est pas censé avoir de coupure sauf que ce n'est pas le cas donc il slide bien à l'infinie dans le sens où les éléments ne disparaissent jamais cependant celui-ci se reset au bout d'un certain temps alors ça prend 0.003s mais malgré ce laps on a une micro frame de reset qui ne me plaît pas du tout si quelqu'un sait comment régler ceci ou si je vais aller gentiment me faire foutre 🤣
(voir ex suivant)
compliqué de savoir d'ou viens le soucis sans le code 👀
Je pense que c'est suffisamment clair pour expliquer le souci sans forcément fournir de code comme dit ce n'est pas un bug majeur juste un détail d'animation qui ne correspond pas à ce que je veux réellement, j'essaie surtout de comprendre le comportement pas de fournir du code à analyser m'enfin bon
si c'est suffisament claire pour trouver sans le code pourquoi tu ne trouve pas la solution malgré que tu ait le code sous les yeux ?
Nn mais par pitié
étant donné que l'utilisateur reste rarement 10 minutes devant ce carrousel infini, tu peux augmenter l'intervall de reset, comme ca ce n'est pas visible par l'utilisateur
par contre c'est pas propre
Merci enfin quelqu'un qui a la lumière a tous les étages
reste respectueux quand même ^^
Honnêtement vu comment il parle non pas de respect a avoir
ce n'est pas le salon pour avoir cette discussion...
enfin bref, ducoup cette solution n'est pas très propre car l'utilisateur pourrait quand même voir le reset.
Le mieux reste en effet de supprimer ce petit lag, mais comme dit plus haut, sans code source, tu es tout seul :/
je ne sais pas comment fonctionne ta feature, mais si c'était mon problème, j'aurait supprimé les éléments à l'instant où ils deviennent cachés, histoire de ne pas avoir trop d'éléments en même temps, ca rendrais déjà le site moins lourd (c'est du chipotage car ca pèse rien, mais ca fera jamais de mal à une personne sur un PC sous pentium)
le même fonctionnement que l'ajout des éléments, mais en sens inverse
par contre ce petit lag je sais pas si c'est parce que le reset est lourd, ou si la position des autres élements dépends de celui qui est supprimé
si c'est le cas, il faut supprimer cette dépendance
tous les éléments sont indépendants entre eux, et ont leur propre gestion du mouvement
ils spawn en absolute dans un parent relatif, et ils sont translate, puis supprimés
après je parles un peu à l'inconnu, je n'ai jamais fait de système de la sorte ^^
mais c'est comme ca que j'aurais fait, moi
Oh c'est pas con
Après le problème c'est côté perf parce qu'actuellement ça touche 0 en perf vu que tout est calculé par un groupe mais si tu calcules tout indépendamment ça risque de toucher au perf
Mais je pense avoir une potentielle solution grâce à toi 🤣 je regarderai ça plus tard
¯_(ツ)_/¯
chatgpt me propose la solution qui tu avais
en vrai il n'y à que des solutions
à toi de trouver le bonne
Hey j'ai tester sur un server en Https et ça ne fonctionne toujours pas non plus
On peut programmer un moment pour regarder stv
Hey j'ai réussi a regler mon problèmes en fin de compte, mais maintenant sais tu si il est possible d'écouter les logs d'un serveur RCON en permanence pour pouvoir les console logs ensuite ?
Mhhh en établisant un stream peut-être sinon en écoutant tout les X secondes tu pourrais essayer ça dépend l'utilité que tu en as derrière
Si tu a besoin de l'info en live le mieux c'est d'établir une sorte de stream entre ton app et ton serveur, comment je sais pas j'ai jamais fait mais c'est surement faisable
Sinon si tu n'a besoin que des infos ressentes genre toutes les minutes ou plus la je conseille juste d'établir un cron c'est le mieux, ca charge moins ton serveur RCON et ton app
@steep gulch
C’est pour faire quoi ?
T’as peut-être mieux que le RCON en fonction de ce que tu veux faire
Qlq saurait m'aider à cree une commande pr un bot discord ?
salut, tu peux me dire précisemment ce que tu veux par message ^^
Quel type de commande
en gros , j'ai un bot et j'aimerais cree des catégorie de permissions pour les attribue à des role , en gros si le mec a le role perm 5 il a acces que à certaine commande genre
pourquoi pas directement limiter la commande à une permission ? sans passer par un rôle