Node.js 调用Express NodeJS中其他路由中已定义的路由
我正在使用Express在node.js中编写一个web应用程序。我已将路线定义如下:Node.js 调用Express NodeJS中其他路由中已定义的路由,node.js,express,run-middleware,Node.js,Express,Run Middleware,我正在使用Express在node.js中编写一个web应用程序。我已将路线定义如下: app.get("/firstService/:query", function(req,res){ //trivial example var html = "<html><body></body></html>"; res.end(html) }); 我在API文档中找不到任何东西,也不想使用另一个库,比如“request”,因为
app.get("/firstService/:query", function(req,res){
//trivial example
var html = "<html><body></body></html>";
res.end(html)
});
我在API文档中找不到任何东西,也不想使用另一个库,比如“request”,因为这看起来很麻烦。我正在努力使我的应用程序尽可能模块化。想法
谢谢你能简单地把它分解成另一个函数,放在一个共享的位置并从那里开始吗
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()
语句,所有回调处理程序都位于不同的、组织更好的文件中。类似于盖茨所说的,但我会将函数(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;
var MyModule=function(){
var firstService=函数(queryParam){
var html=“”;
返回html;
}
var secondService=函数(queryParam){
var数据=第一个服务(queryParam);
//对数据做点什么
返回数据;
}
返回{
第一次服务:第一次服务
,secondService:secondService
}
}();
module.exports=MyModule;
您可以使用运行中间件
模块来实现这一点
app.runMiddleware('/firstService/query',function(responseCode,body,headers){
// Your code here
})
更多信息:
- 模块页面在&李>
披露:我是这个模块的维护者和第一个开发人员。如果你有很多中间件在你的路线上,你可以受益于传播:
const router = express.Router();
const myMiddleware = [
authenticationMiddleware(),
validityCheckMiddleware(),
myActualRequestHandler
];
router.get( "/foo", ...myMiddleware );
router.get( "/v1/foo", ...myMiddleware );
我采用了以下方法:
在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');
}); });
希望这会有所帮助。谢谢!我只是一个快速入门者,正在尝试处理一个越来越难处理的项目。对中级到高级express教程/帮助站点有什么建议吗?这可以用于路由器吗?如果可以,我将如何与所示的示例进行比较?谢谢Morgan显示了运行中间件调用的路由的错误信息。任何帮助@aminadavPer示例:
app.get('/example/c',[cb0,cb1,cb2])
,看起来您甚至不需要spread操作符。不管怎样,很高兴知道@嗯。接得好!这回答了你的问题吗?
router.get('/sitemap', function (req, res, next) {
router.createSitemap(req, res, function () {
res.redirect('/sitemap.xml');
}); });