Problème express.js non actif

#1
Bonjour à tous,

Je viens vers la communauté PH pour essayer de résoudre un problème lié à environnement node.js et au framework express.js.

Après avoir suivi toutes les instructions d’installation d'un environnement node (https://kb.n0c.com/knowledge-base/gestion-des-applications-node-js/) ,
J'ai importé une api de base très simple tester en local.
Mais voilà l’environnement node fonctionne très bien, mais ne prend pas en compte express.js.
Donc je n'ai accès aucune méthode express ,ce qui fait que mon api ne fonctionne pas. je me retrouve avec : Cannot GET /api/user.

Si quelqu'un a une idée d’où cela peut provenir je suis preneur.

Je vous remercie d'avance

package.json
JSON:
{
  "name": "api",
  "version": "1.0.0",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "express": "^4.17.1"
  },
  "devDependencies": {},
  "description": ""
}
server.js
JavaScript:
const http = require('http');
const app = require('./app');
const normalizePort = val => {
    const port = parseInt(val, 10);
    if (isNaN(port)) {
        return val;
    }
    if (port >= 0) {
        return port;
    }
    return false;
};
const port = normalizePort(process.env.PORT || '3100');
app.set('port', port);
const errorHandler = error => {
    if (error.syscall !== 'listen') {
        throw error;
    }
    const address = server.address();
    const bind = typeof address === 'string' ? 'pipe ' + address : 'port: ' + port;
    switch (error.code) {
        case 'EACCES':
            console.error(bind + ' requires elevated privileges.');
            process.exit(1);
            break;
        case 'EADDRINUSE':
            console.error(bind + ' is already in use.');
            process.exit(1);
            break;
        default:
            throw error;
    }
};
const server = http.createServer(app); // https ajouté la const options au parametres de server
server.on('error', errorHandler);
server.on('listening', () => {
    const address = server.address();
    const bind = typeof address === 'string' ? 'pipe ' + address : 'port ' + port;
    console.log('Listening on ' + bind);
});
server.listen(port);
app.js
JavaScript:
const express = require('express');

const bodyParser = require('body-parser');

const userRoutes = require('./routes/user');

const app = express();

app.use((req, res, next) => {
       res.setHeader('Access-Control-Allow-Origin', '*');
       res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content, Accept, Content-Type, Authorization');
       res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS');
       next();
});

app.use(bodyParser.json());

app.use('/user', userRoutes);

module.exports = app;
routes/user.js
JavaScript:
const express = require('express');

const router = express.Router();

const UserCtrl = require('../controllers/user');

router.post('/', UserCtrl.createUser);
router.get('/', UserCtrl.displayUser);
router.put('/', UserCtrl.updateUser);
router.delete('/', UserCtrl.deleteUser);

module.exports = router;
controllers/user.js

JavaScript:
exports.createUser = (req, res, next) => {
    res.status(201).json({ message: 'POST Votre compte a bien été Créer !!' });
};

exports.displayUser = (req, res, next) => {
    res.status(201).json({ message: "GET voici les utilisateurs demandés" });
};

exports.deleteUser = (req, res, next) => {
    return res.status(200).json({ message: 'DELETE l\'utilisateur a bien supprimé' });
};

exports.updateUser = (req, res, next) => {
    res.status(201).json({ message: 'PUT l\'utilisateur a bien été mis a jour' });
};
 
#4
j'ai refais l'installation complète en suivant scrupuleusement la notice.

1 : Configuration de l’application.
2 : Résultat : It Works !
3 : Ajouter la configuration de l’application au fichier app.js.
4 : Résultat : Hello World! nodeJS.
5 : Création du package.json.
6 : Saisisse de la commande d'activation (en ssh).
7 : installation d'express.js

je n'ai importé aucuns fichier externe. j'ai coder en direct une route simple metohd GET qui revoie message json sur le fichier app.js.

app.js
JavaScript:
const http = require('http');
const express = require('express');
const port = '127.0.0.1';
const hostname : 'passenger';

const app = express();

app.use((req, res) => {
    res.status(200).json({ message: 'ma route méthode GET' });
});

const server = http.createServer(app);

server.listen(port, hostname, ()=>{
    console.log(`server running`);
});
sa fonctionne le json s'affiche sans problème.
JavaScript:
app.use((req, res) =>{
       res.status(200).json(message: 'ma route');
});
le json ne s'affiche pas
JavaScript:
app.use('/api', (req, res) =>{
       res.status(200).json(message: 'ma route')
});
le json ne s'affiche pas
JavaScript:
app.get('/api', (req, res) =>{
       res.status(200).json(message: 'ma route')
});
 
Dernière édition:

PH-SylvainJ

New Member
Membre du personnel
#5
Bonjour,

Vous avez apparemment inversé le 'port' et le 'hostname' dans votre exemple.
'passenger' agit comme un proxy et remplace le port classique.

Dans votre exemple app.js
Code:
const http = require('http');
const express = require('express');
const port = '127.0.0.1'; 
const hostname : 'passenger';
Dans notre tutoriel : https://kb.n0c.com/knowledge-base/gestion-des-applications-node-js/
Code:
const http = require('http')
const hostname = '127.0.0.1';
const port = 'passenger';
 

PH-Marc-André.B.

Conseiller technique
Membre du personnel
#7
Bonjour,

Merci de votre retour, nous sommes heureux que vous ayez pu résoudre la situation problématique

Pouvez-vous nous partager la solution?

Je suis persuadé que ça ne manquerait pas d'être pratique pour d'autres usagers qui se trouvent dans la même galère.

Merci d'avance!
 
#8
Bonjour,

J'ai le même problème sur la base de routes.

Pouvez vous me donner la solution que vous avez trouvez s'il vous plait.

Merci d'avance
 
#9
Bonjour,
Pour pouvoir vous aider au mieux il faudrait voir :
L’URL de votre api.
La base de vos routes .
Le nom du dossier ou l'api est stocké.
 
#10
server.js
Code:
const http = require("http");
const express = require("express");
const bodyParser = require('body-parser');
const routeArticle = require("./routes/routeArticle");
const hostname = '127.0.0.1';
const port = 'passenger';

const app = express();

app.use((req, res, next) => {
       res.setHeader('Access-Control-Allow-Origin', '*');
       res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content, Accept, Content-Type, Authorization');
       res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS');
       next();
});

app.use(bodyParser.json());

app.use(routeArticle);

const server = http.createServer(app);

server.listen(port, hostname, () =>
  console.log("Server started")
);
./routes/routeArticle.js (qui ne fonctionne pas)
Code:
const express = require("express");

const controllerArticle = require("../controllers/controllerArticle");

const router = express.Router();

router.get("/article", controllerArticle.getArticle);

exports.default = router;
J'ai également ajouté ceci dans server.js mais le résultat ne s'affiche pas aussi
Code:
app.use('/test', (req, res) => {
  res.statusCode = 200;
  res.setHeader("Content-Type", "text/plain");
  res.end("Hello World! NodeJS");
});
 
#13
vos base de route devrais contenir /server

comme ceci:

router.get("/server/article", controllerArticle.getArticle);

ou

router.get("server/article", controllerArticle.getArticle);
 
Haut