【发布时间】:2016-09-06 17:48:06
【问题描述】:
我目前正在构建一个包含多个页面的 Web 应用程序。然而,这些页面中的每一个都有多个视图。最初的设计是将每个页面设置为 SPA,只从 Node.js 后端提供index.html,让 React.js 处理所有视图路由。
事实证明,这比我想象的要复杂。这就是问题所在。
Node.js 路由 (sn-p):
router.get("/", function(request, response){
response.sendFile("/index.html", {
root: __dirname + "/../client/pages/home/"
});
});
然后在index.html (sn-p):
<html>
<head>
<title>New Website</title>
</head>
<body>
<h1>Welcome to my website..</h1>
<div id="App">
</div>
<script src="index.js"></script>
</body>
</html>
index.js 不包括在内。当浏览器尝试包含 index.js 时,它会从显然未设置的 Node.js 服务器请求路由 www.example.com/index.js,因此我收到了 Cannot GET /index.js 响应。
每个 SPA 都位于其各自的文件夹中,分别为 index.html 和 index.js。目前还不能创建一个包含所有 js 文件的公用文件夹。
================================================ =============================
已解决:这是我使用的代码
clientController.js
module.exports = function(app){
router.get("/", function(request, response){
app.use("/", express.static(__dirname + "/../client/pages/page1/"));
response.sendFile("index.html", {
root: __dirname + "/../client/pages/page1/"
});
});
router.get("/page2/*", function(request, response){
app.use("/", express.static(__dirname + "/../client/pages/page2/"));
response.sendFile("index.html", {
root: __dirname + "/../client/pages/page2/"
});
});
return router;
};
server.js
var routes = require("controllers/clientController.js");
app.use("/", routes);
接受的答案,我还必须在sendFile() 行中添加以防止请求挂起。这会解决响应并允许在 HTML 文件中包含文件的正确路径。
【问题讨论】:
-
您需要确保您的
express启用了静态目录模块。此外,如果它是真正的 SPA,您可以将 HTML 和 API 分离到单独的项目中。 -
整个项目不是SPA。有多个页面,我将每个页面设置为 SPA,因为它们每个都有 3/4 视图。
-
你不需要把app.use(...)放到router.get(...)中。这将在您每次提出请求时产生开销。
-
@bilalba 没有 app.use() 我的问题没有解决?
-
我的意思是,把那些写在router.get(...)之外就行了
标签: javascript html node.js