编写 routes/books.js 文件,该文件将处理所有与书籍相关的路由,包括显示书籍列表、查看书籍详细信息、显示添加书籍的表单以及处理表单提交
时间: 2024-09-26 11:11:15 浏览: 40
在Node.js和Express框架中,`routes/books.js`文件通常用于定义与书籍相关的HTTP请求处理器。这个文件会组织成以下几个部分:
1. **导入模块**:首先,需要导入Express的Router实例和相关的模型,比如Book模型(如果使用的是Mongoose等ORM)。
```javascript
const express = require('express');
const router = express.Router();
const Book = require('../models/book');
```
2. **获取书籍列表**:设置一个GET请求,例如`/books`,展示所有的书籍信息。
```javascript
router.get('/books', async (req, res) => {
try {
const books = await Book.find();
res.json(books);
} catch (error) {
res.status(500).json({ message: 'Error fetching books' });
}
});
```
3. **查看书籍详情**:对于单个书籍,可以设置一个路径如`/books/:id`,获取并返回指定ID的书籍详情。
```javascript
router.get('/books/:id', getSingleBook, (req, res) => {
// 使用getSingleBook中间件函数
});
// 中间件函数
async function getSingleBook(req, res, next) {
try {
const book = await Book.findById(req.params.id);
if (!book) return res.status(404).json({ message: 'Book not found' });
res.json(book);
} catch (error) {
next(error);
}
}
```
4. **添加书籍表单**:创建POST请求,如`/books`,用于接收新书的数据并保存到数据库。
```javascript
router.post('/books', async (req, res) => {
try {
const newBook = new Book(req.body);
await newBook.save();
res.status(201).json(newBook);
} catch (error) {
res.status(400).json({ message: 'Invalid input or duplicate entry' });
}
});
```
5. **处理书籍表单提交**:这通常涉及到前端发送POST请求,这里作为示例说明。如果有个单独的路由如`/add-book`,也可以在这里处理,但实际应用中,上面的POST路由更常见。
6. **错误处理**:在整个文件中,都应包含适当的错误处理代码,以提供有意义的响应给客户端。
阅读全文