【问题标题】:Node JS REST API, now how do I serve HTML files?Node JS REST API,现在我如何提供 HTML 文件?
【发布时间】:2014-07-21 10:42:26
【问题描述】:

所以我在 Node JS 中做了一个 REST Api,现在我有了一个拦截器。

app.use('/api', router);

此代码确保每个 url 都以 api 为前缀。现在,如果我想在路径只是“/”时提供 HTML 文件怎么办?我应该创建另一个“快速”应用程序吗?我现在只是在 localhost 中工作,我必须执行“node server.js”来启动服务器。我真的不能同时启动两台服务器,或者我可以吗?一个用于 api:server.js,另一个用于其余代码:client.js(这是一个坏名字,但无论如何。)。我对如何设置东西感到困惑......

感谢您的帮助。

【问题讨论】:

    标签: javascript node.js rest express


    【解决方案1】:

    您可以看到,您很可能使用 api 路由来提供 JSON 内容。好吧,使用相同的机制,您可以将路由器配置为为特定路由提供任何其他类型的内容。

    所以,如果您想为您的应用程序的根目录提供一些 HTML 内容,比如说您的 API 的 Wiki 页面或文档,它很简单:

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

    当然,如果你只是渲染一个静态 html 页面,你也可以配置一个中间件来定义你放置所有静态内容的位置。

    app.use(express.static(path.join(__dirname, 'www')));
    

    www 是您选择放置 index.html 页面的目录。

    话虽如此,如果您构建的是 REST API,那么它很可能会被多个其他应用程序重用,因此,习惯上客户端应用程序独立于 REST API 运行。一些客户端应用程序甚至可能不是 Web 应用程序(即 Android、iOS、桌面应用程序等)。因此,在考虑在同一项目中开发 Web 客户端之前,您应该考虑到这一点。

    但没有什么能阻止您提供在同一项目/服务器中使用您的 REST API 的默认 UI 实现。是的,可以运行多个 HTTP 服务器服务于不同的应用程序。如果您为 API 使用单独的服务器(即 CORS),则可能需要考虑一些注意事项。

    如果您决定在同一个应用程序中提供所有服务,您可能希望确保在设计中明确解耦,以使客户端应用程序像独立一样使用和使用其余层。您应该将 REST 层的路由与您的客户端使用的路由隔离开来,这样,如果以后您想让客户端 APP 独立运行,您就不会有问题。

    express-namespace 这样的东西来帮助你组织你的路线怎么样?

    【讨论】:

    • 但是如果我所有的路由都以 api 为前缀:app.use('/api', router);,app.get('/') 将是 /api 而不仅仅是 /。跨度>
    • @Maxwell 只需将 / 路由的处理程序放在 /api 路由的处理程序之前就可以了。
    • 你说得对,它在我做 app.get('/') 时有效,但在 router.get('/') 时无效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 2020-08-15
    • 2021-08-09
    • 2014-07-10
    • 2017-07-12
    • 2021-09-12
    • 2019-05-30
    相关资源
    最近更新 更多