Nodejs 哪位给个 Express Mongoose 做基本的博客的例子么?

发布于 1周前 作者 nodeper 来自 nodejs/Nestjs

Nodejs 哪位给个 Express Mongoose 做基本的博客的例子么?

看过另谈之前的帖, 代码不太好懂啊… 相对 MVC 不够熟悉, “又一个Node博客…” http://cnodejs.org/topic/5034627ff767cc9a51b47641 特别是数据库操作, 在代码里面应该怎么管理呢, 比如 Mongoose, 能不能给个例子?

7 回复

当然可以。下面是一个使用 Express 和 Mongoose 创建基本博客系统的简单示例。这个示例将包括创建博客文章的基本 CRUD(创建、读取、更新、删除)操作。

环境准备

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

mkdir blog-app
cd blog-app
npm init -y

接下来,安装所需的依赖包:

npm install express mongoose body-parser ejs

文件结构

blog-app/
├── app.js
├── models/
   └── post.js
├── routes/
   └── posts.js
└── views/
    └── posts.ejs

示例代码

app.js

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

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

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

// 引入路由
const postsRouter = require('./routes/posts');
app.use('/posts', postsRouter);

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

models/post.js

const mongoose = require('mongoose');

const PostSchema = new mongoose.Schema({
  title: { type: String, required: true },
  content: { type: String, required: true }
});

module.exports = mongoose.model('Post', PostSchema);

routes/posts.js

const express = require('express');
const router = express.Router();
const Post = require('../models/post');

router.get('/', async (req, res) => {
  const posts = await Post.find();
  res.render('posts', { posts });
});

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

router.post('/', async (req, res) => {
  const post = new Post(req.body);
  await post.save();
  res.redirect(`/posts`);
});

router.get('/:id', async (req, res) => {
  const post = await Post.findById(req.params.id);
  res.render('post', { post });
});

router.get('/:id/edit', async (req, res) => {
  const post = await Post.findById(req.params.id);
  res.render('edit-post', { post });
});

router.put('/:id', async (req, res) => {
  await Post.findByIdAndUpdate(req.params.id, req.body);
  res.redirect(`/posts/${req.params.id}`);
});

router.delete('/:id', async (req, res) => {
  await Post.findByIdAndRemove(req.params.id);
  res.redirect('/posts');
});

module.exports = router;

views/posts.ejs

<!DOCTYPE html>
<html>
<head>
  <title>Blog Posts</title>
</head>
<body>
  <h1>Blog Posts</h1>
  <ul>
    <% posts.forEach(post => { %>
      <li><a href="/posts/<%= post._id %>"><%= post.title %></a></li>
    <% }) %>
  </ul>
  <a href="/posts/new">Create New Post</a>
</body>
</html>

以上就是使用 Express 和 Mongoose 创建一个简单的博客应用的基本示例。你可以根据需要扩展功能,例如添加用户认证、评论系统等。


用我的静态博客去吧!哈哈…数据库多麻烦…

模仿论坛的代码捣鼓出个博客应该不难啊,而且express 3.0的API我觉得更好理解了,很多都统一了接口.

我就纳闷为什么回复框要加个white-space: nowrap,不自动换行了= =

本来加在首页的, 那边不可控换行比较烦, 后来才发现影响到回复. 虽然… 但是贴报错的几个贴整齐了不少

表示没有 MVC 开发的基础, 我之前处理是这样: https://github.com/jiyinyiyong/zhongli/blob/gh-pages/server.coffee#L19 在看 Express, 可数据库的封装看看没头绪啊

当然可以!下面是一个使用 Express 和 Mongoose 实现基本博客功能的例子。我们将创建一个简单的博客应用,包含文章的增删查改。

项目结构

/blog-app
|-- models
|   |-- Post.js
|-- routes
|   |-- posts.js
|-- app.js
|-- package.json

1. 安装依赖

首先需要安装 Express 和 Mongoose:

npm init -y
npm install express mongoose

2. 创建模型

models/Post.js

const mongoose = require('mongoose');

const postSchema = new mongoose.Schema({
    title: { type: String, required: true },
    content: { type: String, required: true },
    createdAt: { type: Date, default: Date.now }
});

module.exports = mongoose.model('Post', postSchema);

3. 创建路由

routes/posts.js

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

// 获取所有文章
router.get('/', async (req, res) => {
    const posts = await Post.find();
    res.json(posts);
});

// 创建一篇文章
router.post('/', async (req, res) => {
    const post = new Post(req.body);
    await post.save();
    res.status(201).json(post);
});

// 获取单篇文章
router.get('/:id', async (req, res) => {
    const post = await Post.findById(req.params.id);
    if (!post) return res.status(404).send('Post not found');
    res.json(post);
});

// 更新文章
router.put('/:id', async (req, res) => {
    const post = await Post.findByIdAndUpdate(req.params.id, req.body, { new: true });
    if (!post) return res.status(404).send('Post not found');
    res.json(post);
});

// 删除文章
router.delete('/:id', async (req, res) => {
    const post = await Post.findByIdAndRemove(req.params.id);
    if (!post) return res.status(404).send('Post not found');
    res.json({ message: 'Post deleted' });
});

module.exports = router;

4. 创建应用入口文件

app.js

const express = require('express');
const mongoose = require('mongoose');
const postsRouter = require('./routes/posts');

const app = express();

// 使用中间件解析 JSON 请求体
app.use(express.json());

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

// 使用路由
app.use('/api/posts', postsRouter);

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

5. 运行应用

确保 MongoDB 正在运行,然后在终端中运行以下命令启动应用:

node app.js

现在你可以通过访问 http://localhost:3000/api/posts 来测试你的博客 API 了!

希望这个示例对你有所帮助!如果你有任何问题或需要进一步的说明,请随时告诉我。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!