J'ai un routage ExpressJS pour mon API et je veux l'appeler depuis NodeJS
var api = require('./routes/api')
app.use('/api', api);
et à l'intérieur de mon ./ routes/api.js fichier
var express = require('express');
var router = express.Router();
router.use('/update', require('./update'));
module.exports = router;
donc si je veux appeler /api/update/something/:withParam
depuis mon frontal, tout est trouvé, mais je dois l'appeler à partir d'un autre aspect de mon script NodeJS sans avoir à redéfinir à nouveau la fonction entière au 2ème emplacement
J'ai essayé d'utiliser le module HTTP de l'intérieur mais je reçois juste une erreur "ECONNREFUSED"
http.get('/api/update/something/:withParam', function(res) {
console.log("Got response: " + res.statusCode);
res.resume();
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
Je comprends que l'idée derrière Express est de créer des itinéraires, mais comment les appeler en interne
La manière "habituelle" ou "correcte" de gérer cela serait d'avoir la fonction que vous voulez appeler décomposée par elle-même, détachée de toute définition de route. Peut-être dans son propre module, mais pas nécessairement. Ensuite, appelez-le partout où vous en avez besoin. Ainsi:
function updateSomething(thing) {
return myDb.save(thing);
}
// elsewhere:
router.put('/api/update/something/:withParam', function(req, res) {
updateSomething(req.params.withParam)
.then(function() { res.send(200, 'ok'); });
});
// another place:
function someOtherFunction() {
// other code...
updateSomething(...);
// ..
}
C'est un moyen facile de faire une redirection interne dans Express 4:
La fonction que la magie peut faire est: app._router.handle ()
Testing: Nous faisons une demande à home "/" et la redirige vers otherPath "/ autre/chemin"
var app = express()
function otherPath(req, res, next) {
return res.send('ok')
}
function home(req, res, next) {
req.url = '/other/path'
/* Uncomment the next line if you want to change the method */
// req.method = 'POST'
return app._router.handle(req, res, next)
}
app.get('/other/path', otherPath)
app.get('/', home)