Nodejs 哪位给个 Express Mongoose 做基本的博客的例子么?
Nodejs 哪位给个 Express Mongoose 做基本的博客的例子么?
看过另谈之前的帖, 代码不太好懂啊… 相对 MVC 不够熟悉, “又一个Node博客…” http://cnodejs.org/topic/5034627ff767cc9a51b47641 特别是数据库操作, 在代码里面应该怎么管理呢, 比如 Mongoose, 能不能给个例子?
当然可以。下面是一个使用 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 创建一个简单的博客应用的基本示例。你可以根据需要扩展功能,例如添加用户认证、评论系统等。
我就纳闷为什么回复框要加个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 了!
希望这个示例对你有所帮助!如果你有任何问题或需要进一步的说明,请随时告诉我。