0

好的,这是场景,据我所知,创建 Web 应用程序有三种方法

  1. 传统方式:从服务器渲染 HTML 页面
  2. 不确定:创建一个 API 并让用户的浏览器下载 Javascript 应用程序(Angular、React、Ember)以获得高度交互的应用程序
  3. 未来:同构 Web 应用程序,它将 HTML 与来自服务器的客户端技术(Angular、React、Ember)一起呈现。

我打算使用第三种方式,因为加载页面更快,但现在的问题是如果我要创建一个移动应用程序。

我的堆栈:Node.js + React

假设我打算去移动,我需要复制相同的路线和逻辑吗?当前问题

app.get('/users', function(req, res) {
   res.render('index', { message: "Hey Im Jack" });
});

app.get('/api/users', function(req, res) {
   res.json({ message: "Hey Im Jack" })
});

有什么方法可以让我用一条路线同时提供 HTML 和 REST 服务吗?

4

1 回答 1

1

您最终只能发送 HTML 或 JSON(在 REST 的情况下)。

/api/xxx 路由语法使服务 JSON 的路径更加清晰。

但是您可以依赖客户端的请求标头来检查他们请求的是 JSON 还是 HTML

app.get('/users', function(req, res) {
    if (req.headers.accept && req.headers.accept.match(/json/))
        res.json(data);
    else
        res.render('index', data);
});

Angular的$http一般默认请求json,其他的不清楚,但是可以设置headers。浏览器通常会请求 text/html,但我不确定。

或者,如果您只关心不必重复获取数据的逻辑,您可以在两者之前放置一个中间件:

// regex to match both routes
app.get(/.*users/, function(req, res) {
   res.locals.data = { message: "Hey Im Jack" };
   req.next();
});

app.get('/users', function(req, res) {
   res.render('index', res.locals.data);
});

app.get('/api/users', function(req, res) {
   res.json(res.locals.data)
});
于 2015-11-01T18:00:17.707 回答