Реализовать действие «следовать / отменить подписку», используя Node + Express.js и MongoDB - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь создать API в стиле Twitter. Я придумал следующую схему:

  1. Коллекция пользователей

    • имя пользователя
    • пароль
  2. Коллекция последователей

    • follower_id
    • followee_id
    • start_date
    • end_date

Например:

{
  follower_id: 1235
  followee_id: 1024
  start_date: November 3, 2018
}

, что означает, что пользователь 1024 следует за пользователем 1235. Отсутствие end_date указывает на то, что пользователь все еще следует.

  1. Коллекция твитов
    • текст
    • date_created
    • user_id

user_id будет ссылкой на коллекцию пользователей.

Как я могу выполнить следующие действия / отменить подписку с помощью приведенной выше схемы?

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Для пользовательской коллекции вы можете иметь массив following[]. Например, вы помещаете каждый идентификатор пользователя, которому они следуют, в массив, а затем удаляете его, когда отписываетесь от пользователя. Затем с помощью экспресс-обработки вы можете обработать почтовый запрос, отправленный внешним интерфейсом, с помощью экспресс. Конечно, вам нужно логическое выражение, чтобы сказать, как:

// To show the button saying "follow" or "unfollow"    
var followingArray = [123414, 312456, 656465];
var following = false;
if (followingArray.indexOf(userid)) {
  following = true;  
} else {
  following = false;
}

Очевидно, что это всего лишь концепция, и для получения идентификатора пользователя вам потребуется другой код из mongoose или обычный модуль mongodb. Это также решило бы, будет ли ссылка на почтовый запрос http://myapp.com/follow или http://myapp.com/unfollow. Основываясь на этих двух почтовых запросах, вы будете обрабатывать данные, такие как идентификатор пользователя, с помощью body-parser и выражать:

var bodyParser = require('body-parser');
const express = require('express');
const app = express();
const port = 8080 

app.use( bodyParser.json() );       // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
  extended: true
})); 

app.post('/follow', (req, res) => {
  //handle data here for a request to follow someone
  var userid = req.body.userid;
})

app.post('/unfollow', (req, res) => {
  //handle data here for a request to unfollow someone
  var userid = req.body.userid
})

app.listen(port, () => {
  console.log(`Server running on ${port}`);
})

Тогда вы будете использовать эти данные с mongoose или модулем mongodb, чтобы удалить или добавить этот идентификатор пользователя из массива и изменить логическое значение following на true или false. Затем, если вы хотите добавить другие функции, такие как список подписчиков или следующий список, вы можете использовать идентификатор пользователя для этого. Я не даю точный код, как это сделать, так как здесь задействовано много концепций. Я просто пытаюсь дать вам концепции, которые вы бы использовали при этом.

0 голосов
/ 03 ноября 2018

Я рекомендую это:

Держите базу данных как можно более плоской. Это означает, что меньше коллекций. Вам, вероятно, понадобятся только 2 коллекции: users и tweets

По вашему users schema должно выглядеть примерно так:

// Asuming you use mongoose, if you haven't heard about it, you should look it up.
const userSchema = new Schema({
    username: {type: String, required: true, trim: true},
    password: {type: String, required: true},
    following: {type: Array}, // Store all user id of the people that this user is following in an array.
    followers: {type: Array}, // Store all users id of this user's followers in an array.
    tweets: {
        type: Schema.Types.ObjectId, // Store all tweets by this user in an object.
        ref: "Tweet" // Link to Tweet Schema
    } 
}, {_id: true});

Ваш tweets schema:

const tweetSchema = new Schema({
    text: {type: String, required: true}
    // You can also have a userId to store the id of the user whose this tweet belongs to
}, {_id: true});

Затем вы можете использовать create для создания пользователей или твитов, update для редактирования following или followers.

Очевидно, есть несколько способов достичь того, что вы хотите. Это только один из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...