Jump to content

TypeError: Cannot read property 'replace' of null - Sequelize, Nodejs


Jovem Developer

Recommended Posts

Bom dia.

Estou a fazer uma api em nodejs usando sequelize para poder usar diferentes bases de dados.

O problema surge quando no front-end faço uma requisição via "fetch", que é um post que envia este body para o servidor :

 

{ "connectionString" : "mssql://sa:123456@localhost/sakila",  "table" : "film",  "nrlinhas" : "60"}

Aqui estou a enviar uma string de conexão para poder conectar-me a uma base de dados e obter as primeiras 60 linhas da tabela "film" dessa base de dados.

O meu código da rota do servidor, é este : 

const { Sequelize } = require('sequelize');
const db_cliente = new Sequelize('mssql://sa:123456@localhost/sakila')

const dboperations = require('./Operacoes');
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
var app = express();
var router = express.Router();

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cors({origin:"*",}));
app.use('/api', router);
app.use(function(req,res,next){
   res.header("Access-Control-Allow-Origin","*");
   res.header("Access-Control-Allow-Methods","GET,HEAD,POST,PUT,OPTIONS");
   res.header("Access-Control-Allow-Headers","Origin,X-Requested-With,contentType,Content-Type,Accept,Authorization");
   next();
});

var port = process.env.PORT || 8090;
app.listen(port);

router.use((request,response,next)=>{
    console.log('middleware');
    next();
 })

router.route('/getTable').post((request, response)=>{
  let query = {...request.body};
  dboperations.getTable(request,query)
  .then(result => {response.json(result);} )
})

Este é o código da função "getTable(request,query)" : 

async function getTable(request,query){
    try{ 
        var connectionString = request.body.connectionString;
        var table = request.body.table;
        var nrlinhas = request.body.nrlinhas;
        var  s = new Sequelize(connectionString);
        query = "SELECT "+"TOP("+nrlinhas+") * "+" FROM "+ table;  
        return new Sequelize(connectionString).query(query, {type: new Sequelize(connectionString).QueryTypes.SELECT});
    }
    catch(error){
        console.log(error);
    }
}

Quando faço a requisição, o terminal dá o seguinte erro :

TypeError: Cannot read property 'replace' of null
    at new Sequelize (C:\Users\franc\Ambiente de Trabalho\tentativacamada\Backend\node_modules\sequelize\lib\sequelize.js:187:43)
    at Object.getTable (C:\Users\franc\Ambiente de Trabalho\tentativacamada\Backend\Operacoes.js:206:18)
    at C:\Users\franc\Ambiente de Trabalho\tentativacamada\Backend\index.js:80:16
    at Layer.handle [as handle_request] (C:\Users\franc\Ambiente de Trabalho\tentativacamada\Backend\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\franc\Ambiente de Trabalho\tentativacamada\Backend\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\franc\Ambiente de Trabalho\tentativacamada\Backend\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\franc\Ambiente de Trabalho\tentativacamada\Backend\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\franc\Ambiente de Trabalho\tentativacamada\Backend\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Users\franc\Ambiente de Trabalho\tentativacamada\Backend\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\franc\Ambiente de Trabalho\tentativacamada\Backend\node_modules\express\lib\router\index.js:275:10)

Já testei esta requisição com o Postman e ele retorna-me sempre bem a tabela.

Alguém me poderia ajudar a identificar e a resolver este problema, por favor?

Obrigado.

 

aaaaaaaa

Link to comment
Share on other sites

Outra coisa importante

Já cheguei a copiar o código para fazer a requisição no Postman, fiz umas pequenas alterações, e colei na consola do browser e a consola retornou-me também os dados corretamente.

Eu queria mesmo era que ele me devolvesse os dados com o body definido para aquilo que eu queira no front-end.

 

aaaaaaaa

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.