使用 Nodejs 构建推荐系统

问题描述 投票:0回答:1

所以我对 Nodejs 还很陌生,目前正在开发一个项目,希望将推荐系统集成到其中。基本上,注册用户时会生成一个唯一的网址,用户可以使用该网址进行注册,我已经通过了这一部分,但现在正在尝试链接新用户和拥有该链接的用户。

这是我的模型: 推荐模型

import mongoose, { mongo } from 'mongoose';

const referralSchema = new mongoose.Schema({
    referralId: [
        {
            type: String,
            unique: true
        }
    ],
    referralLink: {
        type: String,
        unique: true
    },
    userId: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'user'
    },
    createdAt: {
        type: Date,
        default: Date.now()
    }

})

const Referral = mongoose.model("Referral", referralSchema);

export default Referral;

用户模型

import mongoose from 'mongoose';
import passportLocalMongoose from 'passport-local-mongoose'

const userSchema = new mongoose.Schema({
    firstName: String,
    lastName: String,
    email: {
        type: String,
        trim: true,
        required: true,
        unique: true,
        lowercase: true
    },
    emailToken: String,
    isVerified: Boolean,
    username: String,
    password: String,
    isAdmin: Boolean,
    refId: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "referral",
    },
    walletId: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "wallet",
    },
    plan: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: "plan",
        }
    ]


})

userSchema.plugin(passportLocalMongoose);

const User = mongoose.model("User", userSchema);

export default User;

这是我的代码

router.get('/verify-email', async (req, res, next) => {
    try {
        const user = await User.findOne({ emailToken: req.query.token });
        if (!user) {
            req.flash('error', 'Token is invalid, Please contact us for assistance');
            return res.redirect('/');
        }
        user.emailToken = null;
        user.isVerified = true;

        const savedUser = await user.save().then((user) => {
            //Create new referral for new user
            const newReferrer = new Referral({
                referralId: uuidv4(),
                referralLink: uuidv4(),
                userId: user._id,
            });
            //save referral to the database
            newReferrer.save()

            const customUserResponse = { user: savedUser }
            customUserResponse.refCode = newReferrer.referralId

            req.login(user, async (err) => {
                if (err)
                    return next(err);
                req.flash('success', `Welcome to Jenerouszy Mechanism ${user.username}`);
                const redirectUrl = req.session.redirectTo || `/dashboard`;
                delete req.session.redirectTo;
                res.redirect(redirectUrl);
            });

        });

    } catch (error) {
        console.log(error);
        req.flash('error', 'Something went wrong, please try again or contact us for assistance')
        res.redirect('/')
    }
});
router.get("/referrals", middlewareObj.isLoggedIn, (req, res) => {
    Referral.findOne({ userId: req.user._id })
        .populate('user') //Populate model with user
        .then(loggedUser => {
            //Generate random referral link
            const generatedRefLink = `${req.protocol}://${req.headers.host}/register?reflink=${loggedUser.referralLink}/dashboard`
            res.render('dashboard/referrals', {
                loggedUser: loggedUser,
                generatedRefLink: generatedRefLink

            })
        })


})

我不知道该怎么办,有人可以指导我该怎么做吗。

javascript node.js mongodb mongoose ejs
1个回答
0
投票
const savedUser = await user.save().then((user) => {
            //Create new referral for new user
            const newReferrer = new Referral({
                referralId: uuidv4(),
                referralLink: uuidv4(),
                userId: user._id,
            });
            //save referral to the database
            newReferrer.save()

            const customUserResponse = { user: savedUser }
            customUserResponse.refCode = newReferrer.referralId

            req.login(user, async (err) => {
                if (err)
                    return next(err);
                req.flash('success', `Welcome to Jenerouszy Mechanism ${user.username}`);
                const redirectUrl = req.session.redirectTo || `/dashboard`;
                delete req.session.redirectTo;
                res.redirect(redirectUrl);
            });

        });

await user.save().then((user)这段代码是错误的。

您正在等待 Promise 并在同一个地方使用 then。 考虑删除 await,或者然后。

© www.soinside.com 2019 - 2024. All rights reserved.