#javascript-typescript

1 messages · Page 34 of 1

noble mountain
#

Zaros

#

Ban le sayez frr

queen ocean
#

Je l'ai kick

noble mountain
#

ty

stray nest
#

J'avais pas penser à ça je vais aller le mettre en œuvre

#

merci pour l'aide @noble mountain

noble mountain
#

Si tu les passes sous forme de tableau, ça passe ? : const isAuthorized = useRoleProtection(["admin", "driver"]);

stray nest
#

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

noble mountain
#

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?

stray nest
#

Bro tu es un Démon

stray nest
#

1000x Merci

stray nest
keen narwhal
#

Pourquoi faire un useEffect alors que ta page de base et un serveur side 🤔

#

Ça augmentera la vitesse de chargement

floral bolt
#

Je pense qu’il ne sait pas utilisé nextjs

sacred temple
#

Qui serait traduire un code en go en js ?

round carbon
sacred temple
#

@round carbon

Tout dépend de tes compétences

round carbon
stray nest
stray nest
keen narwhal
#

Quelqu'un aurais une idée de pourquoi sa me met ca quand je veux cliquer sur un bouton ?

floral bolt
#

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

round carbon
#

qui va répondre à l'intéraction

#

en particulier est-ce que c'est la bonne custom-id ?

keen narwhal
last hatch
#

Est-ce mieux de coder en python ou Java ?

#

Pour un bot

acoustic hazel
#

ça dépend

drowsy ocean
acoustic hazel
#

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

drowsy ocean
#

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

acoustic hazel
#

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

drowsy ocean
# acoustic hazel Mais il est important que le débutant sache tout de même cela je pense, afin de ...

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.

acoustic hazel
analog yew
#

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 ?

noble mountain
#
(error: HttpErrorResponse) => {
      if (error.status === 404) {
      } else if (error.status === 204) {
      } else {
      }
    }
  );
tepid mesa
#

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);
```
tepid mesa
trail gull
#

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 !

sudden brook
trail gull
#
  • 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>
wicked notch
#

oui

noble mountain
#

ok

wicked notch
#

du coup c'est and auth

#

controllers

noble mountain
#

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

wicked notch
#

ah oui okay, tu sais comment je peux regler ca s'il te plait ?

#

depuis ce matin je suis dessus je galère trop

noble mountain
#

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. "

wicked notch
#

ca je le met dans authcontrollers, a la place du const token que jai deja

noble mountain
#

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

wicked notch
#

dans user.js ?

noble mountain
#

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

wicked notch
#

c'est pas normal si @noble mountain

wicked notch
#

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

wicked notch
#

merci @fervent pagoda

trail gull
sudden brook
#

Bonjour, je reviens vers toi pour savoir

finite glade
#

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)

keen narwhal
#

Ou l'héberger chez toi sur un raspberry ou un ordi allumer 24/24

keen narwhal
#

Quelqu'un connais une bonne bibliotehque folder/file tree ?

wicked token
fierce grotto
#

perso sous react j'utilise sortable et sous vue TreeList

keen narwhal
#

React 19

finite glade
wicked token
#

Dacc ping moi si ta besoin d'aide ^^

final osprey
misty parcel
final osprey
misty parcel
final osprey
keen narwhal
#

Ça existe plus le gratuit ça demande forcement la cb

misty parcel
final osprey
#

Les trucs payants c’est qu’un « plus »

keen narwhal
#

Ce genre de design

#

J'adore mdr

glass cargo
#

C’est pile le genre de trucs tout moches que je fais pour faire les premiers tests avec l’API 😭

past nimbus
keen narwhal
keen narwhal
past nimbus
keen narwhal
smoky crag
#

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>
noble mountain
#

Après les gens s'attendent plus à un lien

#

Un bouton c'est plus une interaction

#

Alias CRUD en général

smoky crag
noble mountain
#

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.

smoky crag
fierce grotto
#

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 🤣

past nimbus
#

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

serene tangle
#

Bonsoir, est-ce-que des personnes qui connaissent le framework Next seraient dispo pour quelques informations sur la stack ?

keen narwhal
#

Oui ?

#

Tu veux savoir quoi ?

serene tangle
# keen narwhal Tu veux savoir quoi ?

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

floral bolt
#

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 🙂

serene tangle
#

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

floral bolt
#

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 😉

serene tangle
floral bolt
#

Mais pour les packages npm react = next donc pas de soucis de compatibilité 😉

serene tangle
floral bolt
#

Ceux déjà présent font parfaitement l’affaire après ça dépend de ton projet

serene tangle
#

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 🙂

ember falcon
#

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 ?

glass cargo
#

console.log("DEBUG numéro 465") sera ton meilleur ami quand tu seras bloqué kapp

serene tangle
# ember falcon Bonjour j'aurai besoin de conseils est ce que certains d'entre vous pourrez me d...
MDN Web Docs

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.

fierce grotto
keen narwhal
#

Salut j'ai eu un souci que je n'ai jamais eu au part avant

quand je fait npm install

fair ether
#

Tes modules sont obsolètes

keen narwhal
#

npm = 🤮

pure tiger
smoky fog
#

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

molten monolith
keen narwhal
acoustic hazel
keen narwhal
#

y'a tellement mieux

#

Oui

acoustic hazel
#

T'utilises quoi ?

keen narwhal
#

La version bcrypt normal et arreter depuis 5 ans mdrr

#

J'ai mes propres code perso

molten monolith
acoustic hazel
#

Je note je note

summer crater
#

Bonsoir, quelqu'un connait le theme qui est utilisé par Adonisjs sur leur site ?

molten monolith
summer crater
molten monolith
#

Je crois que c'est le thème de la docs qui est comme ça mes check les thème dark sûrement

keen narwhal
molten monolith
#

plus personne utilise bcryptjs

pure tiger
# keen narwhal Oui et des fail qui on jamais etais patch ^^

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

molten monolith
molten monolith
keen narwhal
#

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.

past nimbus
pure tiger
# keen narwhal Ton message est arrogant, contradictoire et manque de rigueur. Tu prétends ê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à.

pure tiger
# molten monolith Mes pourquoi pas fix la vulnérabilité ? Alors qu'on sais qu'elle est là ?

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

GitHub

Hello !! It has been identified that bcrypt@5.1.1 introduces a missing release of resource after effective lifetime vulnerability via a transitive dependency. The vulnerability is linked to the pac...

molten monolith
acoustic hazel
#

Merci d’avoir surgit.

#

Joaquine est parti ?

queen ocean
acoustic hazel
pure tiger
celest cliff
#

C'est lui qui a commencé 🤓

acoustic hazel
pure tiger
# acoustic hazel Bon du coup je peux continuer à use bcrypt sur mes projets

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

acoustic hazel
#

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

ember falcon
#

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

steep gulch
floral bolt
#

A priori ça te log toujours le deniers li

#

Mais pour avoir que le texte c’est « li[0].contentText

ember falcon
steep gulch
ember falcon
floral bolt
#

Bah ça te log la même chose enfaite

#

Mais c’est juste que le premier log tu n’as pas tout les arguments

ember falcon
tawny jewel
#

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🙏

serene tangle
keen narwhal
#

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

pure tiger
keen narwhal
serene tangle
keen narwhal
serene tangle
serene tangle
keen narwhal
floral bolt
#

mais je comprend pas pourquoi tu veux utiliser un uid ?

serene tangle
# keen narwhal non c'est par rapport au RLS policy

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

keen narwhal
keen narwhal
serene tangle
keen narwhal
serene tangle
#

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 ?

serene tangle
#

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

serene tangle
keen narwhal
#

j'ai tester avec ma clé privé et cette fois j'ai plus une erreur de permission mais une autre erreur

serene tangle
molten monolith
#

Ou de t'enregistrer

#

Car la c'est une erreur de ta table users

keen narwhal
molten monolith
#

Screen la ligne stp je suis sur tel

keen narwhal
molten monolith
#

90

keen narwhal
#

c'est la console.error

molten monolith
#

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

keen narwhal
#

le try commence ligne 24

molten monolith
#

Bas faut que tu debug avec des console logs

#

Après chaque fonction tu mes un console.log et tu vois où ça casse

floral bolt
#

C’est plutôt ça que tu dois utilisé vois ça comme un convention

keen narwhal
#

j'ai déjà un created_at dans ma table user

floral bolt
#

Je ne connais pas assez supabase donc je pourrais pas plus t’aider

keen narwhal
floral bolt
molten monolith
#

En gros ta inverse id et uid

keen narwhal
molten monolith
#

Après c'est supabase

keen narwhal
#

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);```
molten monolith
#

Id en bigint et uid en uuid

#

Mes si jamais demain matin on peux check ça ensemble

keen narwhal
keen narwhal
keen narwhal
#

@molten monolith tu est dispo?

floral bolt
# keen narwhal <@657932707279536128> 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;```

keen narwhal
spice grail
keen narwhal
keen narwhal
# spice grail 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);

serene tangle
serene tangle
serene tangle
serene tangle
#

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

serene tangle
keen narwhal
#

et ça marche nickel

serene tangle
#

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 ?

serene tangle
# pure tiger 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 kappo2

#

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 ?

serene tangle
pure tiger
serene tangle
steep gulch
#

Salut il y a quelqu'un qui serait comment se connecter via RCON a un server FIVE M

pure tiger
pure tiger
serene tangle
# pure tiger désolé, j'ai pas trop eu le temps, mais tu peux m'ajouter au repo si tu veux et ...

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? myman

serene tangle
pure tiger
queen ocean
pure tiger
oak yoke
#

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 ?

glass cargo
oak yoke
glass cargo
#

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

serene tangle
serene tangle
oak yoke
#

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

serene tangle
oak yoke
serene tangle
serene tangle
oak yoke
strange saffron
#

Qql peut m’aider svp ?

glass cargo
#

Parce que là, mis à part supposer que c’est en rapport avec du JavaScript/typescript, ça va être compliqué

strange saffron
#

C’est à dire mettre mon probleme ?

glass cargo
#

Oui

#

C’est un serveur d’entraide donc oui

strange saffron
#

Je ne sais pas comment régler le problème de « Embedbuilder is not defined »

#

Sauriez vous comme le régler ?

glass cargo
#

T’as copié collé un code nan ?

strange saffron
#

Un code d’un ami donc je ne sais pas

glass cargo
#

Ça se voit

strange saffron
#

😅

glass cargo
#

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 myman

glass cargo
#

const { EmbedBuild } = require("discord.js") en haut de ton fichier

strange saffron
#

Mais le quel ?

glass cargo
#

….

limber sparrow
#

Le fichier ou y'a ton code...

strange saffron
#

J’en ai plein

glass cargo
#

puissance4.js

strange saffron
#

Okk merci je test !

glass cargo
#

Même si bon c’est pas ta seule erreur j’en vois déjà une autre dans la console

strange saffron
#

J’aurais aussi un autre problème, je le citerais après

strange saffron
#

Oula problème

glass cargo
# strange saffron Citez tout ici si possible ! <:myman:652639112481996801>

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 ^^

glass cargo
limber sparrow
#

Pour le coup y'a deux fois la librairie qui est appelée 😄

strange saffron
strange saffron
#

Enfin pas une erreur mais quelque chose que je ne sais pas modifier

glass cargo
#

C’est pas une bonne pratique mais tant que ça marche kapp

strange saffron
#

Nan mais une erreur hein pas un truc chelou @obtuse orchid

#

😂😂🥲

obtuse orchid
#

j'ai rien dit :p

wicked token
#

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

pure tiger
civic dragon
#

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.

wet temple
wet temple
civic dragon
robust sapphire
#

dommage que ce soit du express 😔

wet temple
wet temple
robust sapphire
#

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é

turbid imp
#

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

robust sapphire
#

Pourquoi dans ce salon :')

turbid imp
#

je viens de debarquer sorry sorry

robust sapphire
#

tkt

turbid imp
robust sapphire
#

non :')

red torrent
normal lichen
#

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

past nimbus
robust sapphire
robust sapphire
past nimbus
pure tiger
#

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

robust sapphire
#

au temps pour moi alors :')

#

je vais rester dans ma grotte qu'est le frontend 😔

fierce grotto
pure tiger
fierce grotto
pure tiger
robust sapphire
#

ça ajoute juste une surcouche de typage, ce qui est dans les faits plutôt cool

pure tiger
robust sapphire
#

ça compile en js

fierce grotto
#

nn mais alors là

#

j'en ai vu des choses mais ptdr

main badger
#

🍿

#

ça cook fort

pure tiger
robust sapphire
#

le typage c'est une surcouche compilateur

pure tiger
#

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é

robust sapphire
robust sapphire
#

sinon tu peux dire au revoir à certains packages js

#

ce qui est problématique quand on se veut être simplement une surcouche

fierce grotto
#

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

robust sapphire
pure tiger
# robust sapphire sinon tu peux dire au revoir à certains packages js

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

pure tiger
# fierce grotto vous réduisez typescript à une surcouche de typage mais vous oubliez que TypeScr...

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

robust sapphire
#

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

pure tiger
#

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

smoky fog
keen narwhal
#

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');
  }
};
meager talon
#

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 !

keen narwhal
meager talon
#

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
});
keen narwhal
meager talon
#

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 !

stray gorge
#

allo je suis nouveaux je veux faire minature de filme qul un peux me faire un cour photohops

keen narwhal
normal lichen
#

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 };
charred lake
#

Bonjour des personne s'y connaissent en

steep gulch
#

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}`);
  });

tranquil egret
#

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 ?

strange saffron
#

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
EATEJ5: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>```
tranquil egret
#

Il semblerais que tu essaye de lire un id sur une variable qui n'est pas défini

steep gulch
tranquil egret
#

Pourrais tu montrer le code ? il se peux que ce soit une mauvaise déclaration ou utilisation du Client

analog yew
#

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 ?

shell monolith
#

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

analog yew
#

en vrai y avait pas mal de problèmes/chosee incomplètes dans mon code, je suis en train de corriger là !

shell monolith
#

bon débuggage 😉

naive wharf
analog yew
ember falcon
#

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

fierce grotto
serene tangle
#

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 sue

ember falcon
stray gorge
#

qui veux faire survie

strange saffron
#

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 ?

normal lichen
serene tangle
outer tide
#

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!

outer tide
dusky swift
#

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>
    );
};
red torrent
#

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}

dusky swift
#

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 :

ember falcon
# outer tide

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

ember falcon
#

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>
  );
}

ember falcon
#

jcrois avoir compris c'est pas parce que j'utilise ça alors que j'ai "use server au dessus ? "

serene tangle
ember falcon
ember falcon
serene tangle
serene tangle
#

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

upbeat abyss
#

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```
static mirage
#

Bonsoir je viens de débuter React.js j'aurais besoin de cours en pdf svp

ember falcon
#

Petite question c’est quoi la meilleur architecture pour un projet en nextjs et en React ?

shy hazel
#

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

high raptor
#

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

shy hazel
#

J'ai toujours la meme erreur

high raptor
#

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

shy hazel
#

en parallel du

res.status(405).json({ success: false, message: "Method not allowed" });
``` ?
high raptor
#

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

shy hazel
#

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.
high raptor
#

Mmmh, et ton handler il est appelé où ?

shy hazel
#

Le submit ?

high raptor
#

non comment il est géré côté serveur ?

high raptor
shy hazel
high raptor
#

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

shy hazel
high raptor
#

Fetch failed loading: POST

#

Mmmh

#

clique sur le lien Contact.jsx:26

shy hazel
#

Cest la route

high raptor
#

et Contact.jsx:45 ?

#

Je crois que le problème c'est que Nextjs n'arrive pas à register ton handler

#

ah si

shy hazel
#
 console.error("Error:", error);```
high raptor
#

mais je ne sais pas pourquoi ça fonctionne pas, je vais creuser

#

Ah ok

shy hazel
ember falcon
#

Pourquoi pas utiliser resend ? @shy hazel

shy hazel
#

resend ?

high raptor
#

(je m'y connais en API mais pas forcément en Nextjs hein)

#

(donc je fais ce que je peux)

shy hazel
#

C'est pas grave merci beaucoup de l'aide ça donne tjrs des pistes qui peuvent mener a la résolution

ember falcon
high raptor
#

essaie de mettre ça en minuscule

ember falcon
high raptor
#

mais ça dit que req.method === "POST" est à false

#

vu que le else renvoit toujours Method not allowed

ember falcon
# shy hazel oui

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 !

shy hazel
high raptor
#

avec ton code ?

shy hazel
high raptor
#

je sais ! fais un console.log(req.method)

#

avant le premier if

#

le debug c'est bien

shy hazel
#

avant le route.js

#

dnas*

#

dans*

high raptor
#

dans le handler(req, res)

shy hazel
#

oui c'est ce que j'ai fait mais rien ne c'est afficher

high raptor
#

alors fait un console.log(req.method)

#

ooups

#

console.log(req)

shy hazel
#

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.
high raptor
#

mais non...

#

shy hazel
#

mais genre jai pas de reponces

high raptor
#

dans la console de ton serveur

shy hazel
#

dcp j'ai tenté dans la console 😅

high raptor
#

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 ?

floral bolt
#

T’es sur quel version de nextjs ?

shy hazel
high raptor
#

et apparemment il faut pas mettre de export default mais plutôt export

floral bolt
high raptor
#

mais ça ressemble pas à un route

shy hazel
floral bolt
#

Tu dois export GET ou POST

high raptor
high raptor
shy hazel
high raptor
#
// route.ts/route.js
export async function POST(request: Request) {
await handler(request)
}
floral bolt
#

Si tu utilises l’ia il utilise l’ancienne version qui ne marche plus

shy hazel
#

a la place du handler

#

?

floral bolt
#

Oui

high raptor
high raptor
#

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

shy hazel
#

je suis un peu perdu en API je vous avoue

high raptor
#
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 ?

shy hazel
#

bah apparement oui mdr

floral bolt
#

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

high raptor
#

Ok

shy hazel
floral bolt
#

À la fin tu fais return new response commme a envoyé @high raptor, tu dois importer response

floral bolt
shy hazel
#

ah oui chuis con mais dcp dans le contact.jsx est ce que je dois modifier un truc ?

floral bolt
high raptor
floral bolt
#

Le res n’est pas nécessaire enfaite

shy hazel
#

Je suis desoler je dois faire un truc je reviens dans l'aprem si vous voulez bien

high raptor
shy hazel
#

Merci bcp en tout cas j'ai l'air d'avoir un réponse je vous transfert tout ca dans l'aprem

high raptor
#
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

naive wharf
shy hazel
#

Ah si j'ai rien dis

#

mais dnas le mail c'est comme ça

high raptor
# shy hazel

fait un console.log(req.body) côté serveur pour voir si y'a bien les options

shy hazel
#

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

high raptor
shy hazel
#

Ah

#

ça le fait pas ça

shy hazel
high raptor
#

Ah si ça le fait bien

#

ça a affiché quoi quand tu as fait un console.log(req.body) ?

#

undefined ?

#

{} ?

shy hazel
#

Rien mdrr

#

je l'ais peut etre mal placer

#

je devrais le placer ou ?

high raptor
#

c'est le format qui va pas

#

c'est un formData que tu envois

shy hazel
#

oui ?

high raptor
shy hazel
high raptor
#

uh

#

fait un console.log(Object.keys(req.body)) à la place

high raptor
#

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

shy hazel
#

tjrs []

high raptor
#

const data = new URLSearchParams(new FormData(formElement));

#
const data = new URLSearchParams(formData);
shy hazel
#

coté client ?

high raptor
#

oui

#

data c'est à envoyer

#

body: data

shy hazel
#

tjrs le []

high raptor
#

Côté client fait un console.log(formData) avant d'envoyer le formulaire

shy hazel
high raptor
#

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);
    }
  };
shy hazel
#

ah bah enfaite meme en modifiant ça fonctionne pas

high raptor
#

côté client formData fait [] ?

shy hazel
#

ah non ptn attend

high raptor
#

ok c'est un Objet, parfait,

si tu met formData dans body sans le JSON.stringify ça fonctionne ou pas ?

shy hazel
#

il y est pas la

naive wharf
#
  const formData = await request.formData()
  const nameFrom = formData.get('nameFrom')
  const phone = formData.get('phone')
#

essaye ça dans ton route handler

high raptor
#

ah bah ça se trouve ça fonctionne ça

high raptor
naive wharf
#

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,
    },
  });
...
shy hazel
#

500 Internal Server Error

naive wharf
#

ton code est pas sur github?

shy hazel
naive wharf
#

parce que l'erreur n'a plus rien a avoir là

high raptor
shy hazel
high raptor
#

essaie await req.json() à la place de req.body

high raptor
#

ton Objet c'est du JSON alors que le FormData c'est autre chose comme il ta montré avec le formData.get("etc")

shy hazel
#

ah dac

naive wharf
#

ah ouais, je pensais que tu utilisais les actions vu que ton state s'appelle formData

naive wharf
#
export async function POST(req) {
  const { from, subject, message, nameFrom, phone } = await req.json()
...
#

dans ton route.js

shy hazel
#

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>)
high raptor
#

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),
      });
...
shy hazel
#
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
high raptor
#

et côté client t'as un message ? par rapport au console.log(formData) ?

shy hazel
#

juste 500 Internal Server Error

high raptor
#

met console.log(formData) avant try {
...
}

shy hazel
high raptor
#

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}),
      });
...
shy hazel
#

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,
high raptor
#

enlève le JSON.stringify et garde body: {...formData}

shy hazel
high raptor
#

si ça fonctionne tjrs pas côté serveur tu remplaces JSON.parse(await req.text()) par await req.json()

shy hazel
#
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
high raptor
#

mais ça s'arrête pas bruh

high raptor
#

et garde le serveur tel quel

shy hazel
shy hazel
high raptor
#

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

shy hazel
#

avant le try ?

high raptor
#
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

shy hazel
shy hazel
#

tjrs pareil

high raptor
#

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 ?

shy hazel
high raptor
#

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()
...
shy hazel
#
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
high raptor
#

côté client avant le try

console.log(JSON.stringify(formData))

côté serveur :

console.log(await req.text()) console.log(await req.json())

shy hazel
#

ou dans le srv ?

high raptor
#

?

#

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);
    }
  };
shy hazel
#

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

high raptor
#

fait un console.log(req)

shy hazel
high raptor
#

est-ce que tu utilises VSCode ?

shy hazel
#

oui

high raptor
#

Ok fait req. et montre moi tout ce qui existe en propriété / methodes

shy hazel
#

dans la console ?

high raptor
#

Non

#

L'intelisense de VSCode

shy hazel
high raptor
#

Non

#

abc

#

veut rien dire

shy hazel
high raptor
#

t'as rien qui s'affiche

shy hazel
#

ah

#

bah moi quand j ecris req. ca me propose ça

high raptor
#

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()
...
shy hazel
#

bah dans le console.log

high raptor
#

...

shy hazel
#

fallait pas ?

high raptor
#

genre t'as fait console.log(req. et puis t'as screnshot ?

high raptor
#

mais où ?

high raptor
shy hazel
high raptor
#

ça c'est quand et dans le code...

shy hazel
high raptor
#

fait console.log(await req.body.json())

shy hazel
#
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
                                  ```
high raptor
#

Hmm ok att

#

const { from, subject, message, nameFrom, phone } = JSON.parse(JSON.stringify(req.text()))

shy hazel
#

on avait deja essayer

#

ça envoie un code 200 mais tjrs rien dans le mail

high raptor
#

console.log(JSON.parse(JSON.stringify(req.text())))

shy hazel
#
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

high raptor
#

ahh, bon bah je pense faire une pause, tu peux voir si d'autres gens veulent t'aider

shy hazel
#

Problème Résolu ! Finalement j'ai utiliser le FormData de NextJS comme KAM avait parler

opal smelt
#

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

pure tiger
opal smelt
#

azy

serene tangle
# opal smelt azy

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.

opal smelt
#

même la commande marche pas

#

c'est bizarre

opal smelt
#

ba je vais coder en py pas grave merci quand même

serene tangle
opal smelt
#

vasy

#

pareil sa marche pas

serene tangle
opal smelt
#

ah ok att je viens de voir je crois

#

je mets quoi

serene tangle
#

Tu dois mettre oui

opal smelt
#

ok mais les scripts télécharger devront être signés genre si je prends un non signé sa sera refusé c'est ça ??

serene tangle
#

Oui avec remoteSigned tu peux exécuter des scripts locaux sans signature mais les telecharge devront être signes

opal smelt
#

sa me soule

#

j'ai pas de chance c'est une dinguerie

#

même en écrivant o sa marche pas

serene tangle
#

C’´est «o» quil faut presser

#

Ah

opal smelt
#

même comme ça sa marche pas

serene tangle
#

Dans ce cas fait entrer en selectionnant le oui en jaune avec les fleches du clavier si c possible

opal smelt
#

windows veut ma mort

#

ba j'appuyais o

#

et sa faisait rien du coup je mettais entrer

serene tangle
#

Reexecute la commande si le oui est en jaune et que tu fais entree ca devrait fonctionner

opal smelt
#

sa fait en jaune mais tjrs pas

serene tangle
#

Envoie un screen pour voir

opal smelt
#

sur win10 sa m'avait jamais fait ça avec js

serene tangle
#

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

opal smelt
#

ok att

#

tjrs pareil

serene tangle
#

Envoie lerreur tjrs

opal smelt
#

win11 pire os actuel c'est bon ou pas

opal smelt
serene tangle
#

Lance la commande set-policy et directement press o une fois que le message de réponse apparaît ca devrait passer

opal smelt
#

vasy

serene tangle
#

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

opal smelt
#

j'ai relancer le shell en plus

serene tangle
#

Non mais la commande en entiere mdrr

opal smelt
serene tangle
#

Bh c’etait set-policy remoteSigned quelque chose comme ca pas juste set policy

#

Puis tappuies sur o

opal smelt
#

que je mettes juste set policy ou pas il veut tjrs pas ce fdp

serene tangle
#

C’est ca ta commande

opal smelt
#

java il est galère à coder comme il est galère à installer c'est grv

serene tangle
#

La pour le coup c’est toi qui arrive pas a taper la ligne de commande correctement kappathugs

opal smelt
#

j'ai copier coller

serene tangle
#

Je tai envoyer sur le screen la commande que tu as mise deja et qui avait fonctionné

opal smelt
#

elle marche mais pour valider sa marche pas

serene tangle
#

Une fois que tu as lancer la commande et quils te posent la question juste tu press o

opal smelt
#

j'ai press o y'a rien

serene tangle
#

Envoie le screen voir

opal smelt
#

le o après les deux points

serene tangle
#

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

opal smelt
#

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'HPharold

#

merci quand même

serene tangle
#

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 pikoh

opal smelt
#

les flèches sa marchent pas

serene tangle
#

Les flèches c’est possible que ca marche pas

#

Mais le o ou le t est censé etre valide

opal smelt
#

Même le o marche pas

serene tangle
#

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

opal smelt
#

Vasy att

#

Check out this software kindly donated by Microsoft

serene tangle
#

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

opal smelt
#

ah oe mais du coup node.js devrait marchais

serene tangle
#

Normalement

#

Essaye de créer un dossier vide

#

Et lance la commande npm init -y

opal smelt
#

je vasi tomber par terre sa marche

serene tangle
#

MDRR pas de soucis bg maintenant tu peux développer en paix (jusqu’au prochaine erreurmmLul)

opal smelt
#

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

serene tangle
#

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

serene tangle
opal smelt
opal smelt
serene tangle
opal smelt
#

markus jsp ce qu'il avait comme maladie pour réussir à coder ça

#

c'est pas un humain normal

serene tangle
#

Mai clairement au premier abord c’est impressionnant

opal smelt
#

c'est vrai que pour lui c'est un truc pas fou

#

mais pour nous c'est le contraire

serene tangle
#

Ah bh pour lui c’est un petit projet du dimanche

#

Pour nous c’est un miracle harold

opal smelt
#

et oui

serene tangle
#

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

opal smelt
#

surtout qu'avec les connaissances tu fais ce que tu veux

serene tangle
opal smelt
#

déjà juste excel et word tu finis banquier, pas rotschild non plus, alors avec java et le reste laisse tomber

opal smelt
serene tangle
#

Clairement apres ça demande beaucoup d’effort mais ca en vaut la peine

opal smelt
#

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

steep gulch
#

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

tranquil egret
opal smelt
#

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

empty panther
empty panther
unkempt sun
#

D’accord dark patato

empty panther
#

😂😂

#

Pardon grand maître, patato est jeune et con 😓

eternal glade
autumn tendon
#

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 ;).

gaunt bear
#

Je ne fais pas de JS mais par contre si tu veux je peux t'aider à mettre ton fichier en .zip

gaunt bear
#

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 ?

plush lava
#

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

autumn tendon
delicate mica
#

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 ?

plush lava
#

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

fierce grotto
#

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)

high raven
fierce grotto
# high raven 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

high raven
fierce grotto
#

Nn mais par pitié

plucky nymph
#

é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

fierce grotto
plucky nymph
#

reste respectueux quand même ^^

fierce grotto
#

Honnêtement vu comment il parle non pas de respect a avoir

plucky nymph
#

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

fierce grotto
#

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

plucky nymph
#

¯_(ツ)_/¯

#

chatgpt me propose la solution qui tu avais

#

en vrai il n'y à que des solutions

#

à toi de trouver le bonne

steep gulch
tranquil egret
steep gulch
tranquil egret
#

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

unkempt sun
#

T’as peut-être mieux que le RCON en fonction de ce que tu veux faire

keen narwhal
#

Qlq saurait m'aider à cree une commande pr un bot discord ?

mighty fossil
plucky nymph
sleek lava
keen narwhal
idle sentinel