服务 HTML 使用 Node 构建一个简单的 SPA。js/Express
Serving HTML to build a simple SPA using Node.js/Express
我想将网站构建为单页应用程序。
据我了解,SPA 以 HTML 文件的形式向应用程序发送单个入口点。
所以我想使用 Node 和 Express 为主页提供服务,然后为页眉和页脚之间的内容提供服务 HTML,当用户导航时使用 AJAX 调用更新这些内容网站。
我知道如何创建 restful API 来将数据作为 JSON 提供,但对如何处理 SPA 的 HTML 部分知之甚少改变。
问题:如何使用 Node 和 Express(如果有帮助的话,最终使用 handlebars 之类的模板引擎)在服务器上实现 HTML 部分的服务?
它真的有意义吗? (页眉和页脚毕竟不是要重新加载的数据。)
你绝对可以用 node.js 做到这一点。首先设置一个 HTML 模板引擎,例如 Swig,(但您可以使用其他引擎)并配置标准选项以呈现 html 页面:
var swig = require('swig');
app.set('view engine', 'html');
app.set('view options', {
layout: false
});
app.engine('html', swig.renderFile);
app.set('view cache', false);
// To disable Swig's cache, do the following:
swig.setDefaults({ cache: false });
app.use(express.static(__dirname + '/public'));
其次,您设置了一个服务于您的主要 HTML 页面的端点。
app.get('/',function(req, res) {
res.render('index');
};
然后您可以创建 node.js 个端点来获取您的数据:
app.get('/users', function(req, res) {
// Do database stuff here
res.status(200).send(results);
}
然后设置 HTML 文件:
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="stylesheets/bootstrap.min.css" rel="stylesheet">
<title>fast MEAN</title>
</head>
<body ng-controller="MainController">
<div class="col-md-12" style="background-color: #006699">
</div>
{% raw %}
{{helloWorld}}
<ng-view></ng-view>
<script src="js/angular.min.js"></script>
<script src="js/angular-route.min.js"></script>
<script src="app.js"></script>
{% endraw %}
</body>
</html>
{% raw %} 和 {% endraw %} 之外的所有内容都将使用 node/swig 模板数据与数据一起呈现,而这些标签内的所有内容都可以使用您在内部使用的任何框架呈现(jquery、angular、反应)等
我的 github 上有这个简单的单页应用程序的一个示例,angular 有一个版本,而 React 有一个版本。希望对您有所帮助。
我想将网站构建为单页应用程序。
据我了解,SPA 以 HTML 文件的形式向应用程序发送单个入口点。
所以我想使用 Node 和 Express 为主页提供服务,然后为页眉和页脚之间的内容提供服务 HTML,当用户导航时使用 AJAX 调用更新这些内容网站。
我知道如何创建 restful API 来将数据作为 JSON 提供,但对如何处理 SPA 的 HTML 部分知之甚少改变。
问题:如何使用 Node 和 Express(如果有帮助的话,最终使用 handlebars 之类的模板引擎)在服务器上实现 HTML 部分的服务?
它真的有意义吗? (页眉和页脚毕竟不是要重新加载的数据。)
你绝对可以用 node.js 做到这一点。首先设置一个 HTML 模板引擎,例如 Swig,(但您可以使用其他引擎)并配置标准选项以呈现 html 页面:
var swig = require('swig');
app.set('view engine', 'html');
app.set('view options', {
layout: false
});
app.engine('html', swig.renderFile);
app.set('view cache', false);
// To disable Swig's cache, do the following:
swig.setDefaults({ cache: false });
app.use(express.static(__dirname + '/public'));
其次,您设置了一个服务于您的主要 HTML 页面的端点。
app.get('/',function(req, res) {
res.render('index');
};
然后您可以创建 node.js 个端点来获取您的数据:
app.get('/users', function(req, res) {
// Do database stuff here
res.status(200).send(results);
}
然后设置 HTML 文件:
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="stylesheets/bootstrap.min.css" rel="stylesheet">
<title>fast MEAN</title>
</head>
<body ng-controller="MainController">
<div class="col-md-12" style="background-color: #006699">
</div>
{% raw %}
{{helloWorld}}
<ng-view></ng-view>
<script src="js/angular.min.js"></script>
<script src="js/angular-route.min.js"></script>
<script src="app.js"></script>
{% endraw %}
</body>
</html>
{% raw %} 和 {% endraw %} 之外的所有内容都将使用 node/swig 模板数据与数据一起呈现,而这些标签内的所有内容都可以使用您在内部使用的任何框架呈现(jquery、angular、反应)等
我的 github 上有这个简单的单页应用程序的一个示例,angular 有一个版本,而 React 有一个版本。希望对您有所帮助。