node.js - 使用node js从mongodb获取数据

标签 node.js mongodb mongoose

我已经使用 Node 创建了一个登录程序,目前我只从 jwt 获取 token ,但我需要用户名、_id 和手机号码以及已经存储在数据库中的 token 如何获取此详细信息。请帮助我,我是 Node 和 mongo 的新手 enter image description here

--------架构------------

var mongoose = require('mongoose');

var users = new mongoose.Schema({
    _id: Number,
    username: String,
    mobile: Number,
    email: { type: String, required: true},
    password: { type: String, required: true},
});

module.exports = mongoose.model('users', users);

const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');


const User = require('../models/users');
router.post('/login', (req, res, next) => {

  User.find({ email: req.body.email })
    .exec()
    .then(users => {
      if (users.length < 1) {
        return res.status(401).json({
          message: "This email does not exist please registor"
        });
      }

      console.log(users[0].password);
      bcrypt.compare(req.body.password, users[0].password, (err, result) => {
        if (err) {
          return res.status(401).json({
            message: "Auth fail"
          });
        }
        console.log(result);
        if (result) {
          const token = jwt.sign({
            email: users[0].email,
            userId: users[0]._id
          }, process.env.JWT_KEY,
            {
              expiresIn: "1h"
            }
          );
          return res.status(200).json({
            message: 'login successfull',
            token: token
          });
        } else {
          res.status(401).json({
            message: "password is incorrect"
          });
        }
      });
    })
    .catch(err => {
      res.status(500).json({
        error: err
      });
    });
});
module.exports = router;

请帮我获取用户名、ID 和手机以及 token

最佳答案

在创建 token 时添加这些信息。

const token = jwt.sign({
        username: users[0].username,
        email: users[0].email,
        userId: users[0]._id,
        mobile: users[0].mobile
      }, process.env.JWT_KEY,
        {
          expiresIn: "1h"
        }
      );

此外,您应该使用 Mongoose “findOne”而不是使用“find”,它将允许您使用像“user.email”这样的用户对象,而不是处理数组并执行“users[0]”。

关于node.js - 使用node js从mongodb获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49420141/

相关文章:

regex - 中间件上的通配符或正则表达式 Node 表示安装路径

node.js - 在 Oauth2orize 模块中使用资源所有者密码

javascript - node.js:console.log() 是一个函数吗?

json - 使用 JSON 作为存储/传输格式的数据库

node.js - MongoDB:如何使用 expressjs 读取所有集合中的所有文档?

c# - 检查 MongoDB 集合是否受 .NET 2.0 驱动程序限制

node.js - Node JS Couchbase 模块 - 如何获取存储桶的所有键?

javascript - Node.js : check if a property is absent from object

javascript - Mongoose 更新条件匹配错误的对象

android - Mongoose 和 Android Volley