0
votes

Créer une instance Express dans un autre fichier

J'ai le scénario suivant:

users.js strud> p> xxx pré>

réservations.js strong> p >

const express        = require('express');
const bodyParser     = require('body-parser');
const app            = express(); 
const apiRoot        = '/api/v1/bookings';

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(function (req, res, next) {    
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:4200'); 
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); 
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
    res.setHeader('Access-Control-Allow-Credentials', false);
    next();
});

app.get(apiRoot, async function(req, res) {
    [... do stuff ...]
});
app.get(apiRoot + '/:id', async function(req, res){
    [... do stuff ...]
});
app.listen(process.env.PORT);


1 commentaires

3 Réponses :


1
votes

Chaque ensemble d'itinéraires pourrait simplement être dans un fichier qui exporte une fonction qui prend app par exemple xxx

puis dans votre principale Xxx


1 commentaires

La solution n'a pas fonctionné dans mon environnement, car j'utilise Nodejs sur un serveur IIS. Mais vous me mettez dans la bonne direction, merci!



1
votes

La conception la plus courante et vraiment comment Express a été conçu, c'est que chacun de vos fichiers devrait créer un routeur et exporter le routeur. Ensuite, vous auriez un fichier principal qui crée l'objet code> code>, importe chacun de vos modules et crochets dans leur routeur. Dans ce cas, vous pouvez également exporter la racine dont ils veulent être installés.

const express = require('express');
const app = express();

// load and hook in the other routers
const m1 = require('./m1");
app.use(m1.apiRoot, m1.router);

const m2 = require('./m2");
app.use(m2.apiRoot, m2.router);

app.listen(process.env.PORT);


4 commentaires

La solution n'a pas fonctionné dans mon environnement, car j'utilise Nodejs sur un serveur IIS. Mais vous me mettez dans la bonne direction, merci!


@ Danilokörber - Je suis curieux de savoir ce que Nodejs sur IIS a quelque chose à voir avec cette question ou réponse?


La façon dont mon IIS est configurée, les itinéraires ne fonctionnent pas à moins que le fichier du nom JS soit identique au dernier élément du chemin. Peut-être que ce n'est pas le meilleur moyen, mais je ne peux pas changer cela.


@ Danilokörber - Wow, c'est vraiment, vraiment limitant. Très étrange.



0
votes

Les deux réponses n'ont pas fonctionné dans mon environnement, car j'utilise Nodejs sur un serveur IIS. Voici la solution que j'ai utilisée:

app.js xxx

users.js < Pré> xxx

Merci pour les réponses fournies. Ils me mettent dans la bonne direction.


1 commentaires

FYI, vous pouvez simplement exporter directement l'objet comme module.exports = app , puis simplement l'utiliser directement lors de l'importation. Il n'y a pas besoin de la fonction que vous avez exportée.