游乐游手机版
首页/编程语言/文章详情

在Ubuntu系统下使用Node.js实现前后端分离的详细步骤

时间:2026-06-13 06:43
在Ubuntu系统上,安装Node js和npm,创建后端Express与前端React项目,开发API接口和页面组件,配置CORS解决跨域,最后用PM2守护后端服务、Nginx托管前端静态文件,实现完整的前后端分离部署。

在Ubuntu系统上搭建Node.js前后端分离项目并不复杂,它更像一套标准的搭建流程。只要明确了前后端各自的职责,按照步骤配置环境、编写代码并启动服务,即可顺利完成。接下来详细拆解具体操作步骤。

Ubuntu Node.js如何实现前后端分离

1. 安装Node.js及npm组件

首先需要搭建基础环境。在终端中执行以下命令即可完成Node.js和npm的安装。

sudo apt update
sudo apt install nodejs npm

安装后建议验证版本,确保环境配置正确再进入下一步。

2. 规划项目目录结构

前后端分离的核心在于各模块独立管理代码。因此需要分别为前端和后端创建独立的项目目录。名称可自由设定,但应保持逻辑清晰,例如使用backendfrontend

构建后端项目目录

mkdir backend
cd backend
npm init -y
npm install express body-parser cors

此处选用Express框架作为后端服务基础,它是一个轻量灵活且高效的Node.js Web框架,非常适合快速构建API接口。

构建前端项目目录

mkdir frontend
cd frontend
npm init -y
npm install react react-dom axios

前端采用React框架,并搭配axios库处理HTTP请求。当然,也可根据实际需求替换为Vue或Angular,整体架构类似。

3. 实现后端API接口

后端项目的核心职责是提供API接口。以下示例创建了一个简单的GET接口,返回JSON数据。若熟悉Express,代码逻辑一目了然。

// backend/index.js
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');

const app = express();
const port = 3000;

app.use(cors());
app.use(bodyParser.json());

app.get('/api/data', (req, res) => {
  res.json({ message: 'Hello from backend!' });
});

app.listen(port, () => {
  console.log(`Server running on https://localhost:${port}`);
});

关键在于前端发送请求后,后端需正确解析并返回数据。后续可根据业务需要添加更多路由及数据库操作。

4. 开发前端展示层

前端部分使用React编写一个简单页面,通过axios从后端获取数据并渲染展示。这是典型的数据获取与渲染流程。

// frontend/src/App.js
import React from 'react';
import axios from 'axios';

function App() {
  const [message, setMessage] = React.useState('');

  React.useEffect(() => {
    axios.get('https://localhost:3000/api/data')
      .then(response => {
        setMessage(response.data.message);
      })
      .catch(error => {
        console.error('There was an error!', error);
      });
  }, []);

  return (
    

{message}

); } export default App;

注意请求地址需匹配后端服务地址(https://localhost:3000/api/data)。端口或路径不一致会导致请求失败,这是前后端联调时常见问题。

5. 启动并运行项目

完成开发与配置后,即可启动项目。需要分别启动后端和前端服务,建议先启动后端。

启动后端服务

cd backend
node index.js

启动前端服务

cd frontend
npm start

后端默认监听3000端口,前端开发服务器通常使用3001端口(若3000被占用则自动切换)。两者都启动后,访问前端地址即可看到后端返回的消息。

6. 跨域配置(可选)

若前后端部署在不同域名或端口,浏览器同源策略会阻止跨域请求。此时需在后端配置CORS中间件,放行前端地址的请求。

// backend/index.js
const cors = require('cors');
app.use(cors({
  origin: 'https://localhost:3001', // 前端应用的地址
}));

开发阶段可放宽限制,生产环境则需严格指定允许跨域的来源。

7. 项目部署上线

开发结束后,需将项目部署到服务器以供外部访问。前后端可部署在同一台或不同服务器,常见方案是使用Nginx托管前端静态资源,后端则通过PM2进程管理器守护Node.js服务。

部署后端

将后端代码上传至服务器,使用PM2启动并保持进程持续运行。

npm install -g pm2
pm2 start index.js --name backend

部署前端

前端需执行构建命令生成静态文件(通常位于build目录),上传至服务器后,使用Nginx配置站点根目录指向该文件夹。

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        root /path/to/frontend/build;
        index index.html;
        try_files $uri /index.html;
    }
}

try_files指令至关重要,它确保单页应用路由正确运行——用户刷新或直接访问子路径时,Nginx始终返回index.html,由前端路由处理。

从环境搭建、代码开发到最终部署,完成以上流程即掌握了一套完整的Node.js前后端分离方案。后续还可集成数据库、用户认证、API版本管理等,进一步完善项目。

来源:https://www.yisu.com/ask/17292735.html
上一篇Ubuntu系统下JS动态加载的完整实现方法与步骤详解 下一篇Ubuntu中如何使用Node.js进行日志管理
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
AWS RDS 数据库配置入门与基础操作指南
编程语言 · 2026-07-10

AWS RDS 数据库配置入门与基础操作指南

本文介绍了AWSRDS的基本概念与核心价值,即提供托管式关系数据库服务,简化运维。详细阐述了创建RDS实例的关键配置步骤,包括引擎选择、实例规格、存储与网络设置。最后,指导读者如何通过多种方式安全连接至数据库实例,并开始进行数据操作,为后续应用开发奠定基础。

PHP MVC中AJAX请求无法调用控制器方法的原因与解决方案
编程语言 · 2026-07-10

PHP MVC中AJAX请求无法调用控制器方法的原因与解决方案

PHPMVC中AJAX请求返回整页HTML的常见原因是控制器方法未正确输出响应或未终止执行,导致框架渲染视图。解决方法是在控制器中设置JSON响应头、输出数据后调用exit()明确终止,同时前端使用小写url和dataType: "json "。

Go语言手动构造rsa.PublicKey:正确初始化大整数模数N完整指南
编程语言 · 2026-07-10

Go语言手动构造rsa.PublicKey:正确初始化大整数模数N完整指南

手动构造RSA公钥时,模数N为*big Int类型,不能直接使用超长十进制字面量,需通过SetString或UnmarshalText方法解析字符串。公钥指数E可直接赋值,推荐65537。生产环境应使用rsa GenerateKey生成密钥对,避免手动构造引发的安全和格式错误。

Go语言实现HTTP定时轮询监控多URL响应时间与状态检测
编程语言 · 2026-07-10

Go语言实现HTTP定时轮询监控多URL响应时间与状态检测

使用Go语言实现HTTP定时轮询监控,通过按行分割与Tab解析URL列表,避免闭包陷阱和nil指针,每个URL启动独立ticker安全并发请求,并配置超时控制与资源关闭,确保响应时间与状态码准确检测。

Tkinter中Label标签在主循环动态更新的正确方法
编程语言 · 2026-07-10

Tkinter中Label标签在主循环动态更新的正确方法

在Tkinter中正确动态更新标签的方法:将标签组件的textvariable参数绑定到一个StringVar变量,然后通过调用该变量的 set()方法更新其值,界面会自动刷新。这样避免直接修改text属性或调用update()。此做法实现数据与界面的解耦,代码更简洁,响应更及时,避免手动同步的闪烁,推荐做法。