Nodejs 如何前后端分离
Nodejs 如何前后端分离
app.set(“views”, __dirname + “/views”);
可不可以改成
app.set("views", "远端ip/views");
这个貌似不行吧, 你可以自己修改
你这个叫前后分离???
本质还是 后端啊…
前后分离的一个例子就是 就是后端只发json…
前端根据这个json 渲染页面…
说得不好, 我没说这个是前后端分离!! 只是顺带问下
如果只是这类分离,你直接把远端的路径mount过来就行了吧… NFS之类的就好啊
根据你这一行代码, 可以说肯定是可以实现的。不过需要你自己写一些代码去实现。Express 渲染页面的逻辑(假设用 Jade 引擎)是:
res.render
传送 Jade 模板名称和数据- fs调用 Jade 文件
- 用 Jade 和
res.render
传递的数据对调用文件编译 - 生成 HTML,发送回客户端。 你所说的,就是想远程调用 Jade,那么很简单,把第二步替换成远程调用就行了
但是,这么做有没有必要,这是你要考虑的。根据你这一行代码,我很难告诉你有没有必要。所以你要提供更多的背景信息,或者自己要判断是否有必要。因为你这样做必然会大幅度增加服务器相应的时间。
这哪是前后分离啊,网站分离可以分为三部分,
- 前端使用前端渲染,从后台异步获取 Model,
- 后端从后台或数据库读取数据,组合 Model 返给前端,
- 后台就是如果业务逻辑复杂,和第三方有大量交互,网站后端维护起来过于复杂,网站后端部分数据可以从后台读取。
前后端分离是一种常见的开发模式,它将前端逻辑和后端逻辑完全独立开来,使得前端可以独立于后端进行开发、测试和部署。对于Node.js来说,通过使用Express等框架可以很方便地实现前后端分离。
实现前后端分离的基本思路
- 后端:负责处理业务逻辑、数据库交互等。
- 前端:负责展示数据、用户交互等。
- API接口:作为前后端沟通的桥梁。
示例代码
后端(Node.js + Express)
首先,我们需要配置Express来提供静态文件服务,并设置视图引擎。
const express = require('express');
const path = require('path');
const app = express();
// 设置静态资源目录,这里通常放前端的静态文件
app.use(express.static(path.join(__dirname, 'public')));
// 设置模板引擎,例如EJS
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// 示例路由
app.get('/', (req, res) => {
res.render('index'); // 渲染views目录下的index.ejs
});
// API接口
app.get('/api/data', (req, res) => {
res.json({ message: 'Hello from backend!' });
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
前端(HTML/JS/CSS)
前端通常放置在public
目录下。例如,你的public/index.html
可能包含以下内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Frontend</title>
</head>
<body>
<h1>Welcome to the frontend!</h1>
<script src="/scripts/app.js"></script>
</body>
</html>
前端JS(调用API)
假设你有一个简单的JS脚本来从后端获取数据并显示到页面上:
fetch('/api/data')
.then(response => response.json())
.then(data => {
document.body.innerHTML += `<p>${data.message}</p>`;
})
.catch(error => console.error('Error:', error));
关于你的问题
关于你提到的app.set("views", "远端ip/views");
,这是不可行的。views
属性是用来指定模板文件所在的本地路径,而不是远程服务器的IP地址。因此,你应该使用本地路径,例如:
app.set('views', path.join(__dirname, 'views'));
这样,Express才能正确找到并渲染你的模板文件。