最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何从userId获取用户名以显示在帖子中?

IT培训 admin 3浏览 0评论

如何从userId获取用户名以显示在帖子中?

[大家好,我试图在该用户创建的帖子中添加用户名,但是我遇到了麻烦。

这是帖子中应显示用户名的部分

<Link style={{ textDecoration: "none", color: "black" }}>
   <h4
     onClick={() => this.handleShowUserProfile(event.userId)}
     className="host-name"
   >
    {getUser(event.userId).name}
   </h4>
</Link>

这是从数据库中捕获用户的位置

import http from "./httpService";

const apiEndPoint = "http://localhost:3100/api/users";

export function getUsers() {
  return http.get(apiEndPoint);
}
export function getUser(userId) {
  return http.get(apiEndPoint + "/" + userId);
}

在后端,这是用户架构的样子

const jwt = require("jsonwebtoken");
const config = require("config");
const Joi = require("joi");
const mongoose = require("mongoose");

const userSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
    minlength: 5,
    maxlength: 50
  },
  bio: {
    type: String,
    required: true,
    minlength: 200,
    maxlength: 400
  },
  interests: {
    type: Array
  },
  email: {
    type: String,
    required: true,
    minlength: 5,
    maxlength: 255,
    unique: true
  },
  password: {
    type: String,
    required: true,
    minlength: 5,
    maxlength: 1024
  },
  isAdmin: Boolean
});

userSchema.methods.generateAuthToken = function() {
  const token = jwt.sign(
    { _id: this._id, isAdmin: this.isAdmin },
    config.get("jwtPrivateKey")
  );
  return token;
};

const User = mongoose.model("User", userSchema);
function validateUser(user) {
  const schema = {
    name: Joi.string()
      .min(5)
      .max(50)
      .required(),
    bio: Joi.string()
      .required()
      .min(200)
      .max(400),
    interests: Joi.array().required(),
    email: Joi.string()
      .min(5)
      .max(255)
      .required()
      .email(),
    password: Joi.string()
      .min(5)
      .max(255)
      .required()
  };

  return Joi.validate(user, schema);
}

module.exports.User = User;
module.exports.validate = validateUser;

这是事件模式...

const Joi = require("joi");
const mongoose = require("mongoose");
const { categorySchema } = require("./category");
const { userSchema } = require("./user");

const Event = mongoose.model(
  "Events",
  new mongoose.Schema({
    image: {
      type: String
    },
    title: {
      type: String,
      required: true,
      minlength: 5,
      maxlength: 50,
      trim: true
    },
    user: {
      type: userSchema,
      required: true
    },
    details: {
      type: String,
      required: true,
      minlength: 200,
      maxlength: 300,
      trim: true
    },
    category: {
      type: categorySchema,
      required: true
    },
    numOfAttendies: {
      type: Number,
      required: true,
      min: 3,
      max: 10000
    }
  })
);

这是handleShowUserProfile

handleShowUserProfile = id => {
   this.setState({
     showUserProfile: true,
     shownUserID: id,
     user: getUser(id)
   });
 };

 handleHideUserProfile = () => {
   this.setState({
     showUserProfile: false
   });
 };
回答如下:

[如果我不得不猜测,getUser()可能会返回一个承诺,而不是一个值。您需要研究从props(state)读取名称并更新状态,而不是试图在那里全部进行。

如何从userId获取用户名以显示在帖子中?

[大家好,我试图在该用户创建的帖子中添加用户名,但是我遇到了麻烦。

这是帖子中应显示用户名的部分

<Link style={{ textDecoration: "none", color: "black" }}>
   <h4
     onClick={() => this.handleShowUserProfile(event.userId)}
     className="host-name"
   >
    {getUser(event.userId).name}
   </h4>
</Link>

这是从数据库中捕获用户的位置

import http from "./httpService";

const apiEndPoint = "http://localhost:3100/api/users";

export function getUsers() {
  return http.get(apiEndPoint);
}
export function getUser(userId) {
  return http.get(apiEndPoint + "/" + userId);
}

在后端,这是用户架构的样子

const jwt = require("jsonwebtoken");
const config = require("config");
const Joi = require("joi");
const mongoose = require("mongoose");

const userSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
    minlength: 5,
    maxlength: 50
  },
  bio: {
    type: String,
    required: true,
    minlength: 200,
    maxlength: 400
  },
  interests: {
    type: Array
  },
  email: {
    type: String,
    required: true,
    minlength: 5,
    maxlength: 255,
    unique: true
  },
  password: {
    type: String,
    required: true,
    minlength: 5,
    maxlength: 1024
  },
  isAdmin: Boolean
});

userSchema.methods.generateAuthToken = function() {
  const token = jwt.sign(
    { _id: this._id, isAdmin: this.isAdmin },
    config.get("jwtPrivateKey")
  );
  return token;
};

const User = mongoose.model("User", userSchema);
function validateUser(user) {
  const schema = {
    name: Joi.string()
      .min(5)
      .max(50)
      .required(),
    bio: Joi.string()
      .required()
      .min(200)
      .max(400),
    interests: Joi.array().required(),
    email: Joi.string()
      .min(5)
      .max(255)
      .required()
      .email(),
    password: Joi.string()
      .min(5)
      .max(255)
      .required()
  };

  return Joi.validate(user, schema);
}

module.exports.User = User;
module.exports.validate = validateUser;

这是事件模式...

const Joi = require("joi");
const mongoose = require("mongoose");
const { categorySchema } = require("./category");
const { userSchema } = require("./user");

const Event = mongoose.model(
  "Events",
  new mongoose.Schema({
    image: {
      type: String
    },
    title: {
      type: String,
      required: true,
      minlength: 5,
      maxlength: 50,
      trim: true
    },
    user: {
      type: userSchema,
      required: true
    },
    details: {
      type: String,
      required: true,
      minlength: 200,
      maxlength: 300,
      trim: true
    },
    category: {
      type: categorySchema,
      required: true
    },
    numOfAttendies: {
      type: Number,
      required: true,
      min: 3,
      max: 10000
    }
  })
);

这是handleShowUserProfile

handleShowUserProfile = id => {
   this.setState({
     showUserProfile: true,
     shownUserID: id,
     user: getUser(id)
   });
 };

 handleHideUserProfile = () => {
   this.setState({
     showUserProfile: false
   });
 };
回答如下:

[如果我不得不猜测,getUser()可能会返回一个承诺,而不是一个值。您需要研究从props(state)读取名称并更新状态,而不是试图在那里全部进行。

发布评论

评论列表 (0)

  1. 暂无评论