Expressを使用してnode.jsでWebアプリを作成しています。ルートを次のように定義しました:
app.get("/firstService/:query", function(req,res){
//trivial example
var html = "<html><body></body></html>";
res.end(html)
});
Express内からそのルートを再利用するにはどうすればよいですか?
app.get("/secondService/:query", function(req,res){
var data = app.call("/firstService/"+query);
//do something with the data
res.end(data);
});
APIドキュメントには何も見つからず、「リクエスト」のような別のライブラリを使用したくありません。アプリをできるだけモジュール化するようにしています。考え?
ありがとう
これを別の関数に分解し、共有スポットに配置してそこから移動できますか?
_var queryHandler = require('special_query_handler');
// contains a method called firstService(req, res);
app.get('/firstService/:query', queryHandler.firstService);
// second app
app.get('/secondService/:query', queryHandler.secondService);
_
正直なところ、app.get(...)
の内部にコールバックをネストするというこのビジネス全体は、実際には素晴らしい習慣ではありません。すべてのコアコードを含む巨大なファイルが作成されます。
本当に必要なのは、app.get()
およびapp.post()
ステートメントで満たされたファイルで、すべてのコールバックハンドラーが、より適切に編成された異なるファイルに存在します。
ゲイツ氏の発言に似ていますが、ルートファイルにfunction(req, res){}
を保持します。だから私は代わりにこのようなことをします:
routes.js
var myModule = require('myModule');
app.get("/firstService/:query", function(req,res){
var html = myModule.firstService(req.params.query);
res.end(html)
});
app.get("/secondService/:query", function(req,res){
var data = myModule.secondService(req.params.query);
res.end(data);
});
そして、あなたのモジュールであなたのロジックを次のように分割してください:
myModule.js
var MyModule = function() {
var firstService= function(queryParam) {
var html = "<html><body></body></html>";
return html;
}
var secondService= function(queryParam) {
var data = firstService(queryParam);
// do something with the data
return data;
}
return {
firstService: firstService
,secondService: secondService
}
}();
module.exports = MyModule;
ルート上に多くのミドルウェアがある場合は、次のように拡散することで利益を得ることができます。
const router = express.Router();
const myMiddleware = [
authenticationMiddleware(),
validityCheckMiddleware(),
myActualRequestHandler
];
router.get( "/foo", ...myMiddleware );
router.get( "/v1/foo", ...myMiddleware );
あなたはそのためにrun-middleware
モジュールを正確に使うことができます
app.runMiddleware('/firstService/query',function(responseCode,body,headers){
// Your code here
})
より詳しい情報:
開示:私はこのモジュールのメンテナーであり、最初の開発者です。
私は次の方法を使用しました:userpage.js
router.createSitemap = function(req, res, callback) { code here callback(value); }
product.jsで
var userPageRouter = require('userpages');
userPageRouter.createSitemap(req, res, function () {
//console.log('sitemap');
});
他のルーティングにも使用できる同じuserpage.jsルーターでも使用できます。例えば。
router.get('/sitemap', function (req, res, next) {
router.createSitemap(req, res, function () {
res.redirect('/sitemap.xml');
}); });
これがお役に立てば幸いです。