簡體   English   中英

如何將最佳實踐應用於 javascript 代碼(以改進我的代碼)

[英]How to apply best practices to javascript code (to improve my code)

你好我開始研究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})
    }
}

在這里我還有另一個 function 可以登錄:

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);
}

看着這個登錄 function 在我看來似乎更干凈,但我懷疑你是否真的可以改進兩者之一(我遵循不同的邏輯來做這兩者)。

我有一個 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');
        }
    }
}

遵循一些標准,使用代碼linting(例如 ESLint)和代碼格式化(例如 Prettier) ,盡量避免代碼重復,使用設計模式,不要讓事情變得復雜。 這些東西將使您的代碼對其他人更具可讀性。

代碼有效且易於閱讀時沒有對錯。


馬丁·福勒。

任何傻瓜都可以編寫計算機可以理解的代碼。 優秀的程序員編寫人類可以理解的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM