MERN Stack: идентификатор пользователя возвращает ноль на POST - PullRequest
0 голосов
/ 31 октября 2019

Я работаю над приложением, которое использует стек MERN с паспортом JS для аутентификации.

ERD приложения выглядит следующим образом:

user
site (belongs to user)
page (belongs to site)

Я могу зарегистрироваться, войдите в систему и получите возвращенный идентификатор пользователя и токен:

* {_id: "5db9760b7ba2c21e9a2659f3", email: “test@gmail.com", token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"}
    * email: “test@gmail.com"
token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
_id: "5db9760b7ba2c21e9a2659f3"
__proto__: Object


Токен сохранен в локальном хранилище.

Теперь я пытаюсь получить следующий шаг в работе ERD:создание сайта. Однако, когда я пытаюсь сделать запрос POST для сайта, я получаю, что идентификатор пользователя возвращает неопределенное значение:

POST http://localhost:3000/api/users/undefined/sites/ 404 (Not Found)

В терминале я получаю эту ошибку:

(node:24299) UnhandledPromiseRejectionWarning: CastError: Cast to ObjectId failed for value "current" at path "_id" for model "Users"

Экспресс

//Create Site
router.post('/:user_id/sites/:site_id/pages', function (req, res, next) {
  const saveData = {
    userId: req.params.user_id,
    siteId: req.params.site_id,
    content: req.body.page.content
  };
  const condition = {
    userId: req.params.user_id,
    siteId: req.params.site_id
  };

  console.log(saveData);

  Content.exists(condition)
    .then((data) => {
      if (data == false) {
        Content.create(saveData)
          .then((data) => {
            res.send(data);
          });
      }
    })

})

РЕАГИРОВАТЬ (api-helper.js)


// LOGIN USER
export const loginUser = async (loginData) => {
  const resp = await api.post('/login', { user: loginData });
  const token = resp.data.user.token;
  storeToken(token);
  return (resp)
}

//POST - CREATE SITE
export const newUserSite = async (user_id, data) => {
  getToken();
  const resp = await api.post(`${user_id}/sites`, { site: data });
  return (resp.data);
}

РЕАГИРОВАТЬ (App.js)

  async componentDidMount() {
    const user = await loginUser();
    this.getUserSites();
    const allUserSites = await getUserSites();
    this.setState({
      users: user,
    });
    console.log(allUserSites);
  };


//Create Site
  newSite = async (e) => {
    e.preventDefault();
    const userID = this.state.users.id;
    const site = await newUserSite(userID, this.state.formData);
    this.setState(prevState => ({
      sites: [...prevState.sites, site],
      currentSiteId: site.id,
    }))
    this.props.history.push("/edit")
  }

Сесть токен, который возвращается и сохраняется в локальном хранилище, я не могу понять, почему идентификатор пользователя возвращается как неопределенный.

...