全栈项目搭建指南:Nuxt.js + Node.js + MongoDB

全栈项目搭建指南:Nuxt.js + Node.js + MongoDB

一、项目概述

我们将构建一个完整的全栈应用,包含:

  • 前端:Nuxt.js (SSR渲染)
  • 后端:Node.js (Express/Koa框架)
  • 数据库:MongoDB
  • 后台管理系统:集成在同一个项目中

二、环境准备

1. 安装必备工具

bash 复制代码
# 安装Node.js (建议16.x以上)
# 安装MongoDB (社区版即可)
# 安装代码编辑器(VSCode推荐)

2. 创建项目目录结构

bash 复制代码
mkdir fullstack-project
cd fullstack-project

三、后端服务搭建

1. 初始化Node.js项目

bash 复制代码
mkdir server
cd server
npm init -y

2. 安装依赖

bash 复制代码
npm install express mongoose cors dotenv bcryptjs jsonwebtoken
npm install --save-dev nodemon

3. 基础Express服务器 (server/index.js)

javascript 复制代码
require('dotenv').config()
const express = require('express')
const mongoose = require('mongoose')
const cors = require('cors')

const app = express()

// 中间件
app.use(cors())
app.use(express.json())

// 数据库连接
mongoose.connect(process.env.MONGO_URI)
  .then(() => console.log('MongoDB connected'))
  .catch(err => console.error(err))

// 路由
app.use('/api/auth', require('./routes/auth'))
app.use('/api/admin', require('./routes/admin'))

const PORT = process.env.PORT || 5000
app.listen(PORT, () => console.log(`Server running on port ${PORT}`))

4. 创建.env文件

env 复制代码
MONGO_URI=mongodb://localhost:27017/fullstack_db
JWT_SECRET=your_jwt_secret_key
PORT=5000

四、前端Nuxt.js搭建

1. 创建Nuxt项目 (回到项目根目录)

bash 复制代码
npx nuxi init client
cd client
npm install

2. 安装常用依赖

bash 复制代码
npm install axios @nuxtjs/auth-next pinia @element-plus/nuxt

3. 配置nuxt.config.ts

javascript 复制代码
export default defineNuxtConfig({
  modules: [
    '@nuxtjs/auth-next',
    '@element-plus/nuxt',
    '@pinia/nuxt'
  ],
  auth: {
    strategies: {
      local: {
        token: {
          property: 'token',
          global: true,
        },
        user: {
          property: 'user',
        },
        endpoints: {
          login: { url: '/api/auth/login', method: 'post' },
          logout: { url: '/api/auth/logout', method: 'post' },
          user: { url: '/api/auth/user', method: 'get' }
        }
      }
    }
  },
  runtimeConfig: {
    public: {
      apiBase: 'http://localhost:5000'
    }
  }
})

五、后台管理系统集成

1. 创建管理后台布局 (client/layouts/admin.vue)

vue 复制代码
<template>
  <div class="admin-layout">
    <AdminSidebar />
    <div class="admin-content">
      <AdminHeader />
      <slot />
    </div>
  </div>
</template>

<script setup>
// 管理后台的公共布局
</script>

2. 创建管理路由 (client/pages/admin/index.vue)

vue 复制代码
<template>
  <div>
    <h1>管理控制台</h1>
    <!-- 这里添加管理界面内容 -->
  </div>
</template>

<script setup>
definePageMeta({
  middleware: 'auth',
  layout: 'admin'
})
</script>

六、数据库模型设计

1. 用户模型 (server/models/User.js)

javascript 复制代码
const mongoose = require('mongoose')
const bcrypt = require('bcryptjs')

const UserSchema = new mongoose.Schema({
  username: { type: String, required: true, unique: true },
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true },
  role: { type: String, enum: ['user', 'admin'], default: 'user' },
  createdAt: { type: Date, default: Date.now }
})

// 密码加密中间件
UserSchema.pre('save', async function(next) {
  if (!this.isModified('password')) return next()
  this.password = await bcrypt.hash(this.password, 10)
  next()
})

module.exports = mongoose.model('User', UserSchema)

七、API路由示例

1. 认证路由 (server/routes/auth.js)

javascript 复制代码
const router = require('express').Router()
const jwt = require('jsonwebtoken')
const User = require('../models/User')

// 用户注册
router.post('/register', async (req, res) => {
  try {
    const user = new User(req.body)
    await user.save()
    res.status(201).json({ success: true })
  } catch (err) {
    res.status(400).json({ error: err.message })
  }
})

// 用户登录
router.post('/login', async (req, res) => {
  const { username, password } = req.body
  const user = await User.findOne({ username })
  
  if (!user || !(await bcrypt.compare(password, user.password))) {
    return res.status(401).json({ error: 'Invalid credentials' })
  }
  
  const token = jwt.sign({ id: user._id }, process.env.JWT_SECRET, { expiresIn: '1d' })
  res.json({ token, user })
})

module.exports = router

八、项目启动与测试

1. 启动MongoDB服务

bash 复制代码
mongod

2. 启动后端服务 (server目录下)

bash 复制代码
nodemon index.js

3. 启动前端开发服务器 (client目录下)

bash 复制代码
npm run dev

九、项目结构完整树

复制代码
fullstack-project/
├── server/
│   ├── models/          # 数据库模型
│   │   └── User.js
│   ├── routes/          # API路由
│   │   ├── auth.js
│   │   └── admin.js
│   ├── index.js         # 主服务器文件
│   └── .env             # 环境变量
└── client/
    ├── pages/           # 页面组件
    │   ├── index.vue
    │   └── admin/
    │       └── index.vue
    ├── layouts/         # 布局组件
    │   ├── default.vue
    │   └── admin.vue
    ├── components/      # 公共组件
    ├── nuxt.config.ts   # Nuxt配置
    └── package.json

十、后续开发建议

  1. API文档:使用Swagger或Postman创建API文档
  2. 错误处理:添加统一的错误处理中间件
  3. 数据验证:使用Joi或Validator.js进行输入验证
  4. 日志系统:添加Winston或Morgan日志记录
  5. 测试:添加Jest单元测试和Supertest API测试
  6. 部署
    • 后端:部署到Heroku或AWS
    • 前端:部署到Vercel或Netlify
    • 数据库:使用MongoDB Atlas云服务

这个模板项目提供了完整的全栈开发基础架构,您可以根据实际需求进行扩展和修改。

相关推荐
UFIT几秒前
NoSQL之redis哨兵
java·前端·算法
超级土豆粉7 分钟前
CSS3 的特性
前端·css·css3
星辰引路-Lefan8 分钟前
深入理解React Hooks的原理与实践
前端·javascript·react.js
wyn2000112819 分钟前
JavaWeb的一些基础技术
前端
Hygge-star34 分钟前
Flask音频处理:构建高效的Web音频应用指南
前端·flask·音视频·pygame·csdn开发云
江城开朗的豌豆1 小时前
JavaScript篇:回调地狱退散!6年老前端教你写出优雅异步代码
前端·javascript·面试
飞鸟malred1 小时前
vite+tailwind封装组件库
前端·react.js·npm
Angindem1 小时前
从零搭建uniapp项目
前端·vue.js·uni-app
java干货1 小时前
深度解析:Spring Boot 配置加载顺序、优先级与 bootstrap 上下文
前端·spring boot·bootstrap
Uyker1 小时前
微信小程序动态效果实战指南:从悬浮云朵到丝滑列表加载
前端·微信小程序·小程序