Javascript 仅当Express 4上的应用程序使用(';/api';)时才呈现页面

Javascript 仅当Express 4上的应用程序使用(';/api';)时才呈现页面,javascript,json,node.js,express,routes,Javascript,Json,Node.js,Express,Routes,我有以下资料: app.js ... var api = require('./routes/api'); app.use('/', api); app.use('/api', api); /routes/api ... var router = express.Router(); router.get('/', passport.authenticate('bearer', { session: false }), function (req, res) { res.json({

我有以下资料:

app.js

...

var api = require('./routes/api');
app.use('/', api);
app.use('/api', api);
/routes/api

...

var router = express.Router();
router.get('/', passport.authenticate('bearer', { session: false }), function (req, res) {
    res.json({
        msg: 'API is running'
    });
});
如何区分
/
/api
路由,以便在
/
上呈现页面,在
/api
上仅返回JSON

我正在考虑将一个函数传递给非api路由以呈现json响应,将另一个函数传递给api路由以显示json响应

还有别的办法吗,还是我想得太多了


提前感谢。

为什么要在同一路由文件上挂载两条路径,即

var api = require('./routes/api');
app.use('/', api);
app.use('/api', api);
您可以使用:

var api = require('./routes/api');
var index = require('./routes/index');
app.use('/', index);
app.use('/api', api);
现在,您可以在这两个文件中编写路由<索引文件中的代码>/将用于
domain.com/
url,api文件中的
/
路由将用于
domain.com/api
url。现在,您可以随心所欲地处理这两个请求

您还可以在索引文件中指定这两个路由(在这种情况下,您不需要创建api文件并将其装载到路径上)。e、 g


这真的取决于你想要什么

我的一个项目的示例:

我们的前端位于
/client/
下,因此当我们得到
/
时,我们使用了
res.redirect('/client/')
来定位HTML文件

或者像
res.render(查看[,本地][,回调])这样的东西可以满足您的需要


看看有很多可能性。

您正在寻找,但它不会使用此选项。是否有理由不使用后缀来区分响应类型:
/api/resource/id.json
/api/resource/id.xml
,或者如果没有提供后缀,则使用
Accept
头来确定类型?查看Accept头,因此我可以使用
if(req.accepts('html')){
对于我的
/
路由和
if(req.accepts('json')){
对于
/api
?您需要使用这种方式
req.accepts(['json','html'])
ans检查返回的内容,因为请求通常是那种格式的
Accept:application/json,*/*;q=0.1
,所以您的第一个
req.accepts('html'))
也会匹配,因为
*/*;q=0.1
。因为我想从任何路由器的两端运行相同的函数。get等。但我想我仍然可以从外部控制器调用相同的函数?@批准你的意思是希望在两个路由上调用相同的函数,例如/login和/api/login?
router.get('/', function( req, res ){
  // code for / path here
});

router.get('/api', function( req, res ){
  // code for /api path here
});