Node.JS MongoDB查询出的ObjectId相关操作

在此纪念一下折磨了很久的ObjectId...

测试代码

var url = "mongodb://mongo:27017/";

var mongo = require('../lib/mongo.js')(url);//自己简单封装的模块

var database = "test";
var collection = "test";

var findObj = {};

mongo.find(database, collection, findObj, function(err, result){
  if(err) console.log(err);
  console.log(result);
});

打印的结果

[ { _id: 5b1e7f1e24e8ab001663b37a, name: 'test' } ]

一开始看起来以为_id字段是String,然后发现类型是object

这里就发生了各种离奇错误...

常用ObjectId处理

转成String

(result[0]._id).toString()

取出时间

(result[0]._id).getTimestamp()

转成Unix时间戳

Date.parse((result[0]._id).getTimestamp())


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,基于Node.js的图书管理系统可以分为以下几个模块: 1. 用户模块:实现用户的注册、登录、修改个人信息等功能。 2. 图书模块:实现图书的添加、修改、删除、查询等功能。 3. 借阅模块:实现用户的借阅、归还操作,并提供相应的借阅记录查询功能。 4. 管理员模块:实现管理员的登录、图书管理、用户管理等功能。 下面是一个简单的实现示例: 1. 创建项目并初始化 ```bash mkdir book-management cd book-management npm init -y ``` 2. 安装依赖 ```bash npm install express body-parser mongoose jsonwebtoken bcryptjs cors ``` 3. 创建数据库模型 在项目根目录下创建`models`目录,并在该目录下创建`user.js`、`book.js`和`borrow.js`三个文件,分别表示用户、图书和借阅记录的数据库模型。 ```javascript // user.js const mongoose = require('mongoose'); const bcrypt = require('bcryptjs'); const UserSchema = new mongoose.Schema({ username: { type: String, required: true }, password: { type: String, required: true }, email: { type: String }, avatar: { type: String } }); UserSchema.pre('save', async function(next) { try { const salt = await bcrypt.genSalt(10); const hash = await bcrypt.hash(this.password, salt); this.password = hash; next(); } catch (error) { next(error); } }); UserSchema.methods.isValidPassword = async function(password) { try { return await bcrypt.compare(password, this.password); } catch (error) { throw error; } }; const User = mongoose.model('User', UserSchema); module.exports = User; ``` ```javascript // book.js const mongoose = require('mongoose'); const BookSchema = new mongoose.Schema({ title: { type: String, required: true }, author: { type: String, required: true }, description: { type: String }, cover: { type: String }, ISBN: { type: String, required: true, unique: true }, category: { type: String }, quantity: { type: Number, default: 0 }, borrow: { type: Number, default: 0 } }); const Book = mongoose.model('Book', BookSchema); module.exports = Book; ``` ```javascript // borrow.js const mongoose = require('mongoose'); const BorrowSchema = new mongoose.Schema({ user: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true }, book: { type: mongoose.Schema.Types.ObjectId, ref: 'Book', required: true }, borrowDate: { type: Date, required: true }, returnDate: { type: Date } }); const Borrow = mongoose.model('Borrow', BorrowSchema); module.exports = Borrow; ``` 4. 创建路由 在项目根目录下创建`routes`目录,并在该目录下创建`auth.js`、`book.js`和`borrow.js`三个文件,表示用户认证、图书管理和借阅记录管理的路由。 ```javascript // auth.js const express = require('express'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); const User = require('../models/user'); const router = express.Router(); router.post('/register', async (req, res, next) => { try { const { username, password, email, avatar } = req.body; const existingUser = await User.findOne({ username }); if (existingUser) { return res.status(400).json({ message: 'Username already exists' }); } const user = new User({ username, password, email, avatar }); await user.save(); const token = jwt.sign({ user }, process.env.SECRET_KEY); res.status(201).json({ user, token }); } catch (error) { next(error); } }); router.post('/login', async (req, res, next) => { try { const { username, password } = req.body; const user = await User.findOne({ username }); if (!user) { return res.status(404).json({ message: 'User not found' }); } const isMatch = await user.isValidPassword(password); if (!isMatch) { return res.status(401).json({ message: 'Wrong password' }); } const token = jwt.sign({ user }, process.env.SECRET_KEY); res.status(200).json({ user, token }); } catch (error) { next(error); } }); module.exports = router; ``` ```javascript // book.js const express = require('express'); const Book = require('../models/book'); const router = express.Router(); router.get('/', async (req, res, next) => { try { const books = await Book.find(); res.status(200).json(books); } catch (error) { next(error); } }); router.post('/', async (req, res, next) => { try { const book = new Book(req.body); await book.save(); res.status(201).json(book); } catch (error) { next(error); } }); router.put('/:id', async (req, res, next) => { try { const { id } = req.params; const book = await Book.findByIdAndUpdate(id, req.body, { new: true }); if (!book) { return res.status(404).json({ message: 'Book not found' }); } res.status(200).json(book); } catch (error) { next(error); } }); router.delete('/:id', async (req, res, next) => { try { const { id } = req.params; const book = await Book.findByIdAndDelete(id); if (!book) { return res.status(404).json({ message: 'Book not found' }); } res.status(200).json(book); } catch (error) { next(error); } }); module.exports = router; ``` ```javascript // borrow.js const express = require('express'); const Borrow = require('../models/borrow'); const router = express.Router(); router.get('/', async (req, res, next) => { try { const borrows = await Borrow.find().populate('user').populate('book'); res.status(200).json(borrows); } catch (error) { next(error); } }); router.post('/', async (req, res, next) => { try { const { user, book, borrowDate } = req.body; const borrow = new Borrow({ user, book, borrowDate }); await borrow.save(); res.status(201).json(borrow); } catch (error) { next(error); } }); router.put('/:id', async (req, res, next) => { try { const { id } = req.params; const borrow = await Borrow.findByIdAndUpdate(id, req.body, { new: true }); if (!borrow) { return res.status(404).json({ message: 'Borrow record not found' }); } res.status(200).json(borrow); } catch (error) { next(error); } }); router.delete('/:id', async (req, res, next) => { try { const { id } = req.params; const borrow = await Borrow.findByIdAndDelete(id); if (!borrow) { return res.status(404).json({ message: 'Borrow record not found' }); } res.status(200).json(borrow); } catch (error) { next(error); } }); module.exports = router; ``` 5. 创建服务器 在项目根目录下创建`server.js`文件,并在该文件中创建服务器,并将用户认证、图书管理和借阅记录管理的路由挂载到相应的路径上。 ```javascript const express = require('express'); const bodyParser = require('body-parser'); const mongoose = require('mongoose'); const cors = require('cors'); const authRouter = require('./routes/auth'); const bookRouter = require('./routes/book'); const borrowRouter = require('./routes/borrow'); require('dotenv').config(); const app = express(); const port = process.env.PORT || 3000; const uri = process.env.MONGODB_URI || 'mongodb://localhost:27017/book-management'; mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => { console.log('Connected to MongoDB'); }) .catch((error) => { console.error(error); }); app.use(cors()); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use('/auth', authRouter); app.use('/books', bookRouter); app.use('/borrows', borrowRouter); app.listen(port, () => { console.log(`Server is running on port ${port}`); }); ``` 6. 运行服务器 使用以下命令启动服务器: ```bash node server.js ``` 然后可以使用Postman等API测试工具测试API接口的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值