Node.js+MongoDB搭建的博客系统,欢迎大家来小站指点一下!谢谢大家(已含Node.js关键词,无需修改)

Node.js+MongoDB搭建的博客系统,欢迎大家来小站指点一下!谢谢大家(已含Node.js关键词,无需修改)

工作之余参考网上的资料,自学node.js,搭建了个小的博客网站,欢迎大家多提建设性意见啊,大恩不言谢。

最好是能注册个账号发表博客啥的,给捧捧场啊,随便注册,邮箱瞎填都行,限制比较小。

博客地址:Yblog

26 回复

当然可以!以下是针对你提供的帖子内容进行扩展和补充:


Node.js + MongoDB 搭建的博客系统,欢迎大家来小站指点一下!谢谢大家

工作之余参考网上的资料,自学 Node.js,搭建了个小的博客网站,欢迎大家多提建设性意见啊,大恩不言谢。

博客功能介绍

  • 用户注册:支持邮箱注册,但对邮箱格式不做严格校验。
  • 博客发布:用户可以创建并发布自己的博客文章。
  • 博客浏览:所有用户都可以浏览发布的博客文章。

技术栈

  • 前端:HTML, CSS, JavaScript (使用 EJS 模板引擎)
  • 后端:Node.js (Express 框架)
  • 数据库:MongoDB (使用 Mongoose 进行数据模型定义)

示例代码

安装依赖

首先确保安装了 Node.js 和 MongoDB。然后创建项目文件夹,并初始化 npm:

mkdir myblog
cd myblog
npm init -y

安装所需的 npm 包:

npm install express mongoose ejs body-parser
创建服务器

创建一个 server.js 文件:

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');

const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.set('view engine', 'ejs');

// 连接 MongoDB
mongoose.connect('mongodb://localhost/myblog', { useNewUrlParser: true, useUnifiedTopology: true });

// 用户模型定义
const UserSchema = new mongoose.Schema({
    username: String,
    email: String,
    password: String
});

const BlogSchema = new mongoose.Schema({
    title: String,
    content: String,
    author: String
});

const User = mongoose.model('User', UserSchema);
const Blog = mongoose.model('Blog', BlogSchema);

app.get('/', async (req, res) => {
    const blogs = await Blog.find().sort('-createdAt');
    res.render('index', { blogs });
});

app.post('/register', async (req, res) => {
    const { username, email, password } = req.body;
    const user = new User({ username, email, password });
    await user.save();
    res.redirect('/');
});

app.listen(3000, () => console.log('Server is running on port 3000'));
创建模板

views 文件夹下创建 index.ejs 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>My Blog</title>
</head>
<body>
    <h1>Welcome to My Blog</h1>
    <% blogs.forEach(blog => { %>
        <div>
            <h2><%= blog.title %></h2>
            <p><%= blog.content %></p>
            <small>By <%= blog.author %></small>
        </div>
    <% }) %>
    <form action="/register" method="POST">
        <input type="text" name="username" placeholder="Username" required>
        <input type="email" name="email" placeholder="Email" required>
        <input type="password" name="password" placeholder="Password" required>
        <button type="submit">Register</button>
    </form>
</body>
</html>

博客地址

点击访问我的博客


希望这些信息对你有帮助,期待你的反馈和建议!


最主要的参考了本站置顶的教学贴,改了一下界面,嘿嘿,大神们轻拍

精选 里面的图片轮换是怎么实现的?学习

用得一个开源的插件,Slicebox

好漂亮. 能不能看下源码? Github 上有 说起来没看懂"精选"这个页面下边的色块是做什么的?

git地址:https://github.com/yang6233562/y,写的磕碜别笑话啊 哈哈,那些色块就是占位的,还没想好该放些神马

额。。把地址后面的中文去掉。。

BAE怎么申请啊。。。

按照说明的格式填个单子,等两天就行了啊

赞一个,学习了

东西不错 就是有几点不好的 1、js加载太多了; 2、没有gzip压缩

好赞~

话说好久没来 Cnodejs 版式也变漂亮了。

那个图片切换特效帅啊~

哈哈,你提的很对,主要是小站,我就没做优化,js的话主要是那个瀑布流用的kissy,文件巨多,准备换掉

哈哈,是开源的一个插件

谢谢支持

互相学习

不错!

~~感谢支持

看了你的源码,我有个问题:

首页的文章对应作者为什么不直接调用user接口获取,为啥要在文章doc中加name字段呢?

如果要关联文章和用户可以使用用户id关联嘛。

而且你把用户的头像地址和评论,pv都写在了文章doc中,

如果我以后还需要一些其他数据呢,难道要重新去修改文章doc的结构??这样做太麻烦了吧!

你提的问题非常好,仔细想想的确如此,主要是小站的话还看不出来有什么不方便,如果系统很庞大,那就会非常笨拙了,后面有时间会尝试做修改,感谢提点~嘿嘿

非得用Bootstrap?

长得像点点

感谢大家的支持和访问!以下是我用 Node.js 和 MongoDB 搭建的博客系统的简单实现,希望对大家有所帮助。如果有任何问题或建议,欢迎随时指出。

项目结构

/blog-system
│
├── app.js          # 主应用文件
├── config.js       # 配置文件
├── models          # 数据库模型
│   └── blog.js     # 博客模型
│   └── user.js     # 用户模型
├── routes          # 路由文件
│   └── blogs.js    # 博客路由
│   └── users.js    # 用户路由
└── views           # 视图文件
    └── index.ejs  # 首页视图

安装依赖

首先需要安装必要的依赖包:

npm install express mongoose ejs body-parser

示例代码

app.js - 应用入口文件

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');

const app = express();
const PORT = process.env.PORT || 3000;

// 连接数据库
mongoose.connect('mongodb://localhost:27017/blog', { useNewUrlParser: true, useUnifiedTopology: true });

app.use(bodyParser.urlencoded({ extended: false }));
app.set('view engine', 'ejs');

// 引入路由
app.use('/blogs', require('./routes/blogs'));
app.use('/users', require('./routes/users'));

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

models/user.js - 用户模型

const mongoose = require('mongoose');

const UserSchema = new mongoose.Schema({
    username: { type: String, required: true, unique: true },
    password: { type: String, required: true }
});

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

routes/users.js - 用户路由

const express = require('express');
const router = express.Router();
const User = require('../models/user');

router.get('/register', (req, res) => {
    res.render('register');
});

router.post('/register', async (req, res) => {
    const { username, password } = req.body;
    try {
        await User.create({ username, password });
        res.redirect('/login');
    } catch (err) {
        console.error(err);
        res.status(500).send('Registration failed');
    }
});

module.exports = router;

希望大家多多访问并提出宝贵的意见!

再次感谢大家的支持!如果遇到任何问题或有任何改进建议,请随时告诉我。

回到顶部