在Mac上用nodejs制作图书管理系统
时间: 2023-08-16 18:42:25 浏览: 139
nodejs图书管理系统
好的,制作图书管理系统需要以下步骤:
1. 安装Node.js和npm
如果您还没有安装Node.js和npm,请先从官方网站下载和安装它们。
2. 创建一个新的Node.js项目
使用命令行工具创建一个新的Node.js项目,并初始化一个package.json文件。
```
mkdir book-management-system
cd book-management-system
npm init -y
```
3. 安装必要的依赖项
在项目目录下,使用npm安装以下必要的依赖项:
```
npm install express ejs mongoose body-parser --save
```
- express是Node.js的一个Web框架,用于处理HTTP请求和响应
- ejs是一个模板引擎,用于渲染HTML页面
- mongoose是一个MongoDB对象模型工具,用于连接和操作MongoDB数据库
- body-parser是一个Node.js中间件,用于解析HTTP请求的主体部分
4. 创建数据库连接
使用mongoose来连接到MongoDB数据库。在项目的根目录下创建一个db.js文件,然后添加以下代码:
```
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/book-management-system', {
useNewUrlParser: true,
useUnifiedTopology: true
});
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
db.once('open', function () {
console.log('MongoDB connected!');
});
```
这将连接到名为book-management-system的本地MongoDB数据库。
5. 创建路由
在项目的根目录下创建一个routes目录,并创建一个books.js文件。在books.js文件中添加以下代码:
```
const express = require('express');
const router = express.Router();
const Book = require('../models/book');
router.get('/', async (req, res) => {
const books = await Book.find();
res.render('books/index', { books: books });
});
router.get('/new', (req, res) => {
res.render('books/new', { book: new Book() });
});
router.post('/', async (req, res) => {
const book = new Book({
title: req.body.title,
author: req.body.author,
publishedDate: new Date(req.body.publishedDate),
pageCount: req.body.pageCount,
description: req.body.description
});
try {
const newBook = await book.save();
res.redirect(`books/${newBook.id}`);
} catch {
res.render('books/new', {
book: book,
errorMessage: 'Error creating book'
});
}
});
module.exports = router;
```
这些路由将处理/books路径下的GET和POST请求,以及/books/new路径下的GET请求。它们将从数据库中检索和创建书籍,并在渲染HTML页面时使用模板引擎。
6. 创建模型
在项目的根目录下创建一个models目录,并创建一个book.js文件。在book.js文件中添加以下代码:
```
const mongoose = require('mongoose');
const bookSchema = new mongoose.Schema({
title: {
type: String,
required: true
},
author: {
type: String,
required: true
},
publishedDate: {
type: Date,
required: true
},
pageCount: {
type: Number,
required: true
},
description: {
type: String,
required: true
},
createdAt: {
type: Date,
required: true,
default: Date.now
}
});
module.exports = mongoose.model('Book', bookSchema);
```
这将定义一个名为Book的模型,并描述了每个书籍文档的结构。
7. 创建视图
在项目的根目录下创建一个views目录,并在其中创建一个books目录。在books目录中,创建以下文件:
- index.ejs:用于显示所有书籍的列表
- new.ejs:用于创建新书籍的表单
在index.ejs中添加以下代码:
```
<h1>Book Management System</h1>
<a href="/books/new">New Book</a>
<table>
<thead>
<tr>
<th>Title</th>
<th>Author</th>
<th>Published Date</th>
<th>Page Count</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<% books.forEach(function(book) { %>
<tr>
<td><%= book.title %></td>
<td><%= book.author %></td>
<td><%= book.publishedDate.toLocaleDateString() %></td>
<td><%= book.pageCount %></td>
<td><%= book.description %></td>
</tr>
<% }); %>
</tbody>
</table>
```
在new.ejs中添加以下代码:
```
<h1>New Book</h1>
<form action="/books" method="POST">
<div>
<label for="title">Title</label>
<input type="text" id="title" name="title" value="<%= book.title %>">
</div>
<div>
<label for="author">Author</label>
<input type="text" id="author" name="author" value="<%= book.author %>">
</div>
<div>
<label for="publishedDate">Published Date</label>
<input type="date" id="publishedDate" name="publishedDate" value="<%= book.publishedDate.toISOString().slice(0, 10) %>">
</div>
<div>
<label for="pageCount">Page Count</label>
<input type="number" id="pageCount" name="pageCount" value="<%= book.pageCount %>">
</div>
<div>
<label for="description">Description</label>
<textarea id="description" name="description"><%= book.description %></textarea>
</div>
<button type="submit">Create Book</button>
</form>
```
这些视图将使用ejs模板引擎来渲染HTML页面,并与路由和模型一起使用。
8. 启动服务器
在项目的根目录下创建一个app.js文件,并添加以下代码:
```
const express = require('express');
const app = express();
const db = require('./db');
const bookController = require('./controllers/books');
app.set('view engine', 'ejs');
app.use(express.urlencoded({ extended: false }));
app.use('/books', bookController);
app.listen(3000, () => {
console.log('Server started on port 3000');
});
```
这将启动一个Express服务器,并使用路由和控制器来处理HTTP请求和响应。
9. 运行应用程序
在命令行中运行以下命令以启动应用程序:
```
node app.js
```
然后,在Web浏览器中导航到http://localhost:3000/books以访问图书管理系统。
希望这些步骤可以帮助您在Mac上制作图书管理系统。
阅读全文