如何将最佳实践应用于javascript代码(以改进我的代码)

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

您好,我开始研究javascript,nodejs,reactjs前端

而且我对在此javascript世界中适用的最佳做法有一些疑问,我想对我的代码提出意见,我应该如何改进

从一个例子开始,我有2个功能,使用不同的方式处理诺言

这里有添加用户的途径

 addUsers(req,res,next) {
    try {
        const {name,email,login} = req.body;
        User.existLogin(req.body.login)
        .then(async result => {
            if(!result){
                const password = await bcrypt.hashSync(req.body.password, 10);
                User.create({ 
                    name, email, login, password }).then(result => {
                    res.status(201).json({Results: result.dataValues})
                })
            }else{
                return res.status(409).json({message: 'Login already exists'}); 
            }
        })
    } catch (error) {
        res.status(500).json({error: error})
    }
}

这里还有另一个登录功能:

async login(req,res){
    const  user  = await User.existLogin(req.body.login);
    if (!user) { return res.status(400).json({result: 'Login is wrong '});} 
    const isPassword = await User.isPassword(user.dataValues.password, req.body.password);
    if (!isPassword) { return res.status(400).json({result: 'Password is wrong '}); } 
    const jwt = auth.signjwt(auth.payload(user));
    console.log(jwt);
    res.status(200);
    res.json(jwt);
}

看着这个登录功能在我看来似乎更干净,但是我怀疑如果您真的可以在以下两个方面之一中进行改进,(我遵循不同的逻辑来做到这两个)。

我有一个auth文件夹,在其中导出函数,例如我的有效负载,我的标志,我的中间件以验证jwt,但我不知道这是否是正确的决定。

const jwt = require('jsonwebtoken');
const User = require('../models/User')
const config= require('../config/dbconfig');
const moment = require('moment');

module.exports = {
    signjwt (payload) {
        return jwt.sign(payload, 
            config.secretToken
                   )
    },
    payload (usuario) {
        return {
            sub: usuario.id,
            name: usuario.nome,
            email: usuario.email,
            login: usuario.username,
            admin: true,
            iat: Math.floor(moment.now()/1000), // Timestamp de hoje
            exp: moment().add(10, 'minutes').unix() // Validade de 2 dias
        }
    },
    async auth(req,res,next){
        const token = req.header('Authorization');
        console.log(token);
        if(!token) return res.status(401).json('Unauthorized');
        try{
            const decoded = jwt.verify(token,config.secretToken);
            const user = await User.findByPk(decoded.sub);
            console.log(user);
            if(!user){
                return res.status(404).json('User not Found');
            }
            res.json(user);
            next();
        }catch(error){
            console.error(error);
            res.status(400).json('Invalid Token');
        }
    }
}
javascript node.js
1个回答
0
投票
遵循一些标准,使用代码掉线

(例如ESLint)和代码格式化(例如Prettier),请尝试尽可能避免代码重复,使用设计模式,不要做复杂的事情。这些东西会使您的代码对其他人更具可读性。

代码正常工作时没有对与错,而且很容易阅读。


马丁·福勒。

任何傻瓜都可以编写计算机可以理解的代码。好程序员编写人类可以理解的代码。
© www.soinside.com 2019 - 2024. All rights reserved.