Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

TypeError: Assignment to constant variable

Quando tento fazer a requisição no postman recebo o erro de que estou tentando reatribuir um valor à constante uploadDeArquivos, mas a única forma de importá-la em models/pets é através de const. Tentei com let e a requisição não é enviada, fica só carregando.Alguém poderia me ajudar a encontrar onde estou errando? \

//models/pets.js:
const conexao = require("../infraestrutura/conexao")
const uploadDeArquivos = require("../arquivos/uploadDeArquivos")

class Pet {
    adiciona(pet, res) {
        const sql = "INSERT INTO Pets SET ?"

        uploadDeArquivos = (pet.imagem, pet.nome, (novoCaminho) => {
            const novoPet = {
                nome: pet.nome,
                imagem: novoCaminho
            }

            conexao.query(sql, novoPet, (erro) => {
                if(erro) {
                    res.status(400).json(erro)
                } else {
                    res.status(200).json(novoPet)
                }
            })
        })
    }
}

module.exports = new Pet
//index.js:
const customExpress = require("./config/customExpress")
const conexao = require("./infraestrutura/conexao")
const Tabelas = require("./infraestrutura/tabelas")

conexao.connect(erro => {
    if(erro) {
        console.log(erro)
    } else {
        console.log("conectado com sucesso!")

        Tabelas.init(conexao)

        const app = customExpress()

        const port = 3000
        app.listen(port, console.log(`Rodando em http://localhost:${port}`))
    }
})
//mensagem de erro quando tento enviar a requisição:
TypeError: Assignment to constant variable.
    at Pet.adiciona (C:\Users\NINO\Documents\Dev\Alura\Node Rest\models\pets.js:8:26)     
    at C:\Users\NINO\Documents\Dev\Alura\Node Rest\controllers\pets.js:7:13
    at Layer.handle [as handle_request] (C:\Users\NINO\Documents\Dev\Alura\Node Rest\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\NINO\Documents\Dev\Alura\Node Rest\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\NINO\Documents\Dev\Alura\Node Rest\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\NINO\Documents\Dev\Alura\Node Rest\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\NINO\Documents\Dev\Alura\Node Rest\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Users\NINO\Documents\Dev\Alura\Node Rest\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\NINO\Documents\Dev\Alura\Node Rest\node_modules\express\lib\router\index.js:275:10)
    at jsonParser (C:\Users\NINO\Documents\Dev\Alura\Node Rest\node_modules\body-parser\lib\types\json.js:119:7)
3 respostas

Bom, pelo que eu vi o erro é esse: Variáveis Constantes não podem ser alteradas. Por exemplo, se eu criar esse código:

const Number = 3
console.log(Number)

Ele não vai dar nenhum erro. Ele vai imprimir corretamente o Número 3. Mas, caso você fizer isso:

const Number = 3
console.log(Number)
Number = 1
console.log(Number)

O Código vai dar erro, pois, variáveis constantes não podem ser alteradas.

Bom, agora que já sabemos o porque desse erro, vamos olhar para o seu código.

const uploadDeArquivos = require("../arquivos/uploadDeArquivos")
/*...*/
uploadDeArquivos = (pet.imagem, pet.nome, (novoCaminho) => {
                /*...*/
        })

Você criou a variável uploadDeArquivos como constante, e tenta atribui-la um outro valor.

Solução: Bom, nesse caso, você teria que me mostrar arquivo "uploadDeArquvio"

Opa! Esqueci esse detalhe haha. Segue o código:

const fs = require("fs")
const path = require("path")

module.exports = (caminho, nomeDoArquivo, callbackImagemCriada) => {
    const tiposValidos = ["jpg", "jpeg", "png"]
    const tipo = path.extname(caminho)
    const tipoEhValido = tiposValidos.indexOf(tipo.substring(1))
    if(tipoEhValido === -1) {
        console.log("Erro! Tipo inválido")
    } else {
        const novoCaminho = `./assets/imagens/${nomeDoArquivo}${tipo}`

        fs.createReadStream(caminho)
            .pipe(fs.createWriteStream(novoCaminho))
            .on("finish", () => callbackImagemCriada(novoCaminho))
    }
}
solução!

Bom, a solulção é simples: No seu arquivo que você mandou primeiro, na parte onde você chama a variável uploadDeAruivos, você tem que tirar o '='. Vai ficar assim:

uploadDeArquivos(pet.imagem, pet.nome, (novoCaminho) => {