আমি ল্যাবিথিয়টিসের এক্সপ্রেস-তালিকা-রুটগুলি দ্বারা অনুপ্রাণিত হয়েছি, তবে আমি আমার সমস্ত রুট এবং ব্রুট ইউআরএলগুলির একই সাথে একটি সংক্ষিপ্ত বিবরণ চেয়েছিলাম, এবং কোনও রাউটার নির্দিষ্ট না করে প্রতিবার উপসর্গটি বের করেছিলাম। আমি যে কিছুটা সামনে এলাম তা হ'ল আমার নিজের ফাংশন দিয়ে অ্যাপ.ইউজ ফাংশনটি প্রতিস্থাপন করা যা বেসউরল এবং প্রদত্ত রাউটার সঞ্চয় করে। সেখান থেকে আমি আমার সমস্ত রুটের যে কোনও টেবিল মুদ্রণ করতে পারি।
এটি আমার পক্ষে কাজ করুন কারণ আমি আমার রুটগুলি একটি নির্দিষ্ট রুট ফাইলে (ফাংশন) এ ঘোষণা করি যা অ্যাপ্লিকেশনটিতে পাস হয়ে যায়:
// index.js
[...]
var app = Express();
require(./config/routes)(app);
// ./config/routes.js
module.exports = function(app) {
// Some static routes
app.use('/users', [middleware], UsersRouter);
app.use('/users/:user_id/items', [middleware], ItemsRouter);
app.use('/otherResource', [middleware], OtherResourceRouter);
}
এটি আমাকে নকল ব্যবহারের ফাংশন সহ অন্য একটি 'অ্যাপ' অবজেক্টে যেতে দেয় এবং আমি সমস্ত রুট পেতে পারি। এটি আমার জন্য কাজ করে (স্বচ্ছতার জন্য পরীক্ষা করার ক্ষেত্রে কিছু ত্রুটি সরিয়ে ফেলেছে, তবে এখনও উদাহরণ হিসাবে কাজ করে):
// In printRoutes.js (or a gulp task, or whatever)
var Express = require('express')
, app = Express()
, _ = require('lodash')
// Global array to store all relevant args of calls to app.use
var APP_USED = []
// Replace the `use` function to store the routers and the urls they operate on
app.use = function() {
var urlBase = arguments[0];
// Find the router in the args list
_.forEach(arguments, function(arg) {
if (arg.name == 'router') {
APP_USED.push({
urlBase: urlBase,
router: arg
});
}
});
};
// Let the routes function run with the stubbed app object.
require('./config/routes')(app);
// GRAB all the routes from our saved routers:
_.each(APP_USED, function(used) {
// On each route of the router
_.each(used.router.stack, function(stackElement) {
if (stackElement.route) {
var path = stackElement.route.path;
var method = stackElement.route.stack[0].method.toUpperCase();
// Do whatever you want with the data. I like to make a nice table :)
console.log(method + " -> " + used.urlBase + path);
}
});
});
এই পুরো উদাহরণটি (কিছু বেসিক সিআরইউডি রাউটার সহ) সবেমাত্র পরীক্ষা করে মুদ্রিত হয়েছিল:
GET -> /users/users
GET -> /users/users/:user_id
POST -> /users/users
DELETE -> /users/users/:user_id
GET -> /users/:user_id/items/
GET -> /users/:user_id/items/:item_id
PUT -> /users/:user_id/items/:item_id
POST -> /users/:user_id/items/
DELETE -> /users/:user_id/items/:item_id
GET -> /otherResource/
GET -> /otherResource/:other_resource_id
POST -> /otherResource/
DELETE -> /otherResource/:other_resource_id
ক্লাই-টেবিল ব্যবহার করে আমি এরকম কিছু পেয়েছি:
┌────────┬───────────────────────┐
│ │ => Users │
├────────┼───────────────────────┤
│ GET │ /users/users │
├────────┼───────────────────────┤
│ GET │ /users/users/:user_id │
├────────┼───────────────────────┤
│ POST │ /users/users │
├────────┼───────────────────────┤
│ DELETE │ /users/users/:user_id │
└────────┴───────────────────────┘
┌────────┬────────────────────────────────┐
│ │ => Items │
├────────┼────────────────────────────────┤
│ GET │ /users/:user_id/items/ │
├────────┼────────────────────────────────┤
│ GET │ /users/:user_id/items/:item_id │
├────────┼────────────────────────────────┤
│ PUT │ /users/:user_id/items/:item_id │
├────────┼────────────────────────────────┤
│ POST │ /users/:user_id/items/ │
├────────┼────────────────────────────────┤
│ DELETE │ /users/:user_id/items/:item_id │
└────────┴────────────────────────────────┘
┌────────┬───────────────────────────────────┐
│ │ => OtherResources │
├────────┼───────────────────────────────────┤
│ GET │ /otherResource/ │
├────────┼───────────────────────────────────┤
│ GET │ /otherResource/:other_resource_id │
├────────┼───────────────────────────────────┤
│ POST │ /otherResource/ │
├────────┼───────────────────────────────────┤
│ DELETE │ /otherResource/:other_resource_id │
└────────┴───────────────────────────────────┘
কোনটা গাধা মারছে।