Javascript 需要找出一种模式,使相同的代码同时适用于api和正常渲染

Javascript 需要找出一种模式,使相同的代码同时适用于api和正常渲染,javascript,json,node.js,rest,express,Javascript,Json,Node.js,Rest,Express,如何使node.js应用程序在api调用时呈现JSON,并使用设计模式呈现正常调用的页面? 例子: mysite.com/products-正在呈现产品页面。 我想让mysite.com/api/products-使用现有路由呈现该页面的JSON格式。我能建议的最好方法是覆盖响应对象的呈现方法,并根据请求条件决定: var app = module.exports = (global.express = require('express'))(); var render = express.re

如何使node.js应用程序在api调用时呈现JSON,并使用设计模式呈现正常调用的页面? 例子: mysite.com/products-正在呈现产品页面。
我想让mysite.com/api/products-使用现有路由呈现该页面的JSON格式。

我能建议的最好方法是覆盖响应对象的呈现方法,并根据请求条件决定:

var app = module.exports = (global.express = require('express'))();
var render = express.response.render;
express.response.render = function(view, options, callback) {
    this.locals.xhr = this.req.xhr; // Now you can use xhr var in layouts
    // if the accept header is json output json, change it with your request condition
    if (this.req.headers.accept === 'application/json') this.json(options);         
    else render.apply(this, arguments);
};

这没有任何意义,您的示例中有
mysite.com/products
mysite.com/api/products
,它们显然是两个不同的路由,但您询问如何使第二个路由使用现有路由。即使这是有道理的,您也违反了SRP(单一责任原则),您只会让api消费者和同事感到困惑。