用nodejs实现一个博客管理系统
时间: 2024-03-06 11:47:02 浏览: 38
Node.js 可以很方便地实现一个博客管理系统,下面是一个简单的示例代码:
1. 安装必要的依赖库
```bash
npm install express ejs mongoose body-parser method-override --save
```
2. 创建一个 Express 应用
```javascript
const express = require('express');
const app = express();
```
3. 配置 EJS 模板引擎
```javascript
app.set('view engine', 'ejs');
```
4. 配置静态文件夹
```javascript
app.use(express.static(__dirname + '/public'));
```
5. 配置 body-parser 中间件,用于处理 POST 请求
```javascript
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: true}));
```
6. 配置 method-override 中间件,用于处理 PUT/DELETE 请求
```javascript
const methodOverride = require('method-override');
app.use(methodOverride('_method'));
```
7. 配置 Mongoose 数据库连接
```javascript
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/myblog');
```
8. 创建博客文章的数据模型
```javascript
const blogSchema = new mongoose.Schema({
title: String,
content: String,
created: {type: Date, default: Date.now}
});
const Blog = mongoose.model('Blog', blogSchema);
```
9. 创建博客文章的路由
```javascript
// 显示所有博客文章
app.get('/blogs', function(req, res) {
Blog.find({}, function(err, blogs) {
if(err) {
console.log(err);
} else {
res.render('index', {blogs: blogs});
}
});
});
// 显示新建博客文章的表单
app.get('/blogs/new', function(req, res) {
res.render('new');
});
// 新建博客文章
app.post('/blogs', function(req, res) {
Blog.create(req.body.blog, function(err, newBlog) {
if(err) {
console.log(err);
res.render('new');
} else {
res.redirect('/blogs');
}
});
});
// 显示指定博客文章的详情
app.get('/blogs/:id', function(req, res) {
Blog.findById(req.params.id, function(err, foundBlog) {
if(err) {
console.log(err);
res.redirect('/blogs');
} else {
res.render('show', {blog: foundBlog});
}
});
});
// 显示编辑博客文章的表单
app.get('/blogs/:id/edit', function(req, res) {
Blog.findById(req.params.id, function(err, foundBlog) {
if(err) {
console.log(err);
res.redirect('/blogs');
} else {
res.render('edit', {blog: foundBlog});
}
});
});
// 更新博客文章
app.put('/blogs/:id', function(req, res) {
Blog.findByIdAndUpdate(req.params.id, req.body.blog, function(err, updatedBlog) {
if(err) {
console.log(err);
res.redirect('/blogs');
} else {
res.redirect('/blogs/' + req.params.id);
}
});
});
// 删除博客文章
app.delete('/blogs/:id', function(req, res) {
Blog.findByIdAndRemove(req.params.id, function(err) {
if(err) {
console.log(err);
res.redirect('/blogs');
} else {
res.redirect('/blogs');
}
});
});
```
10. 创建 EJS 模板文件
index.ejs
```html
<% blogs.forEach(function(blog) { %>
<h2><a href="/blogs/<%= blog._id %>"><%= blog.title %></a></h2>
<p><%= blog.content %></p>
<p><%= blog.created %></p>
<hr>
<% }); %>
```
new.ejs
```html
<h1>New Blog</h1>
<form action="/blogs" method="POST">
<label for="title">Title</label>
<input type="text" name="blog[title]" id="title">
<br>
<label for="content">Content</label>
<textarea name="blog[content]" id="content"></textarea>
<br>
<input type="submit" value="Create">
</form>
```
show.ejs
```html
<h1><%= blog.title %></h1>
<p><%= blog.content %></p>
<p><%= blog.created %></p>
<a href="/blogs/<%= blog._id %>/edit">Edit</a>
<form action="/blogs/<%= blog._id %>?_method=DELETE" method="POST">
<input type="submit" value="Delete">
</form>
```
edit.ejs
```html
<h1>Edit Blog</h1>
<form action="/blogs/<%= blog._id %>?_method=PUT" method="POST">
<label for="title">Title</label>
<input type="text" name="blog[title]" id="title" value="<%= blog.title %>">
<br>
<label for="content">Content</label>
<textarea name="blog[content]" id="content"><%= blog.content %></textarea>
<br>
<input type="submit" value="Update">
</form>
```
以上代码实现了一个简单的博客管理系统,包括了博客文章的增删改查等基本功能。当然,还有很多细节问题需要考虑,比如表单验证、用户认证等等。