Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Hisoka.

Node JS

Recommended Posts

Amigos, bom dia!

Estou iniciando uns estudos com node, e pra começo estou fazendo um sistema de cadastro. Até ai rodou tudo certinho qnd eu fiz inline, tudo na pagina index.js. Agr se eu colocar a parte do mongoose na pagina model.js, eu recebo um erro: USER.CREATE IS NOT A FUNCTION.

Alguém pode me ajudar a separar meu código em index.js, routes.js e model.js.

var express = require('express');var app = express();var http = require('http').Server(app);//var model = require('./models');var bodyParser = require('body-parser');app.use(bodyParser.json());app.use(express.static('public'));var urlencodedParser = bodyParser.urlencoded({ extended: false });var mongoose = require('mongoose');mongoose.connect('mongodb://localhost:27017/project');var models = {};var user = mongoose.model('User',{	username: String,	email: String,	status: Boolean});mongoose.connection.on('connected', function () {    console.log('Mongoose connected...');}); module.exports = models;app.post('/add', urlencodedParser, function (req, res) {	console.log('mostra o que tens :'+req.body);    user.create({        username: req.body.username,        email: req.body.email,        status: req.body.status    }, function (err, user) {        if (err) console.log(err);        res.json(user);    });});http.listen(3000);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tu criou um mongoose schema pra esse seu model ?

N amigo!

N usei nhm schema.

Tinha até usado em um outro exemplo, MS n funcionou.

Esse tal de schema resolveria esse problema? S sim, como crio?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei de ver ali, que você passou o schema por parametro, não precisa criar um new Schema....

Vamos lá, temos que analisar o seu código pra fazer uma separação... posso te ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá então, vou mostrar uma estrutura básica....

//Arquivo app.js
var express = require('express');
var bodyParser = require('body-parser');
var routerExemplo = require('./routerExemplo');//irei explicar de onde virá este arquivo também...
var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.set('porta',2000); // explicarei depois porque fazer isso....

app.use('/',RouterExemplo);

//dando export no app para importamos no index.js
module.exports = app;

//Arquivo index.js
//Importanto o app que demos export lá 

var app = require('./app');

//startando o servidor passando porta e um callback
app.listen(app.get('porta'),function(){
    console.log('Servidor rodando na porta :'+app.get('porta'));
});

// Arquivo routerExemplo
var express = require('express');
var router = express.Router();

router.get('/rota-exemplo', function(request,response){
   console.log('Rota de exemplo...');
});

//dando export no router para importar no app 
module.exports = router;

Vamos lá entender cada passo:

Em app você define as configurações como porta, o arquivo routes separado, lembrando que o ideal é você separar em vários Routers e utilizar o app.use('/', NomeDoArquivoDeRota), para que o express faça o bind das rotas e assim você consiga separar bem cada rota com sua responsabilidade. Também passamos os demais modulos para o app como você mesmo já havia feito.

Recomendo fortemente para o aprendizado o livro de um dos moderadores aqui do fórum o William Bruno ou wbruno, o livro Construindo Aplicações com NodeJS, é um ótimo guia e há muito contéudo lá, muito bem explicado e utilizando boas práticas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá então, vou mostrar uma estrutura básica....

//Arquivo app.js
var express = require('express');
var bodyParser = require('body-parser');
var routerExemplo = require('./routerExemplo');//irei explicar de onde virá este arquivo também...
var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.set('porta',2000); // explicarei depois porque fazer isso....

app.use('/',RouterExemplo);

//dando export no app para importamos no index.js
module.exports = app;

//Arquivo index.js
//Importanto o app que demos export lá 

var app = require('./app');

//startando o servidor passando porta e um callback
app.listen(app.get('porta'),function(){
    console.log('Servidor rodando na porta :'+app.get('porta'));
});

// Arquivo routerExemplo
var express = require('express');
var router = express.Router();

router.get('/rota-exemplo', function(request,response){
   console.log('Rota de exemplo...');
});

//dando export no router para importar no app 
module.exports = router;

Vamos lá entender cada passo:

Em app você define as configurações como porta, o arquivo routes separado, lembrando que o ideal é você separar em vários Routers e utilizar o app.use('/', NomeDoArquivoDeRota), para que o express faça o bind das rotas e assim você consiga separar bem cada rota com sua responsabilidade. Também passamos os demais modulos para o app como você mesmo já havia feito.

Recomendo fortemente para o aprendizado o livro de um dos moderadores aqui do fórum o William Bruno ou wbruno, o livro Construindo Aplicações com NodeJS, é um ótimo guia e há muito contéudo lá, muito bem explicado e utilizando boas práticas.

Amigo, mt obrigado pela resposta. Me ajudou mt.

eu vi q faltava ali o models.User.create({.. na index.js. P isso que dava o user.create is not function.

Vou pegar um livro msm p aprender, pq o material q achei na net até agr, os caras so codificam e pouco explicam oq tão fazendo.

Mt obrigado ai!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por cmoreira1300
      Meu programa não consegue identificar o dotenv na middleware
      Eu estava fazendo um CRUD simples, implementei o dotenv no meu programa, está funcionando quando faço a conexão com o banco de dados e a inserção e uma função normal,  mais quando vou fazer isso dentro de uma middleware ele não chama meu dotenv, só funciona quando tiro o process.env e ponho as informações direto na função de conexão.
      require( 'dotenv' ).config( { path: '../../.env' } ) const mysql = require( 'mysql2' ) // DESSA FORMA NÃO FUNCIONA const connection_pool = mysql.createPool( { host: process.env.DB_HOST, user: process.env.DB_USER, database: process.env.DB_DATABASE, password: process.env.DB_PASS } ) // DESSA FORMA FUNCIONA // const connection_pool = mysql.createPool( { // host: 'localhost', // user: 'carlos', // database: 'simple_crud', // password: 'pass1241' // } ) module.exports = connection_pool.promise() INSERÇÃO NO BANCO DE DADOS
      const db_conn = require( '../db/connection' ) const createNewClient = ( name ) => { return db_conn.execute( `INSERT INTO client ( name ) values (?)`, [ name ] ) } module.exports = { createNewClient } FAZENDO A INSERÇÃO NO MIDDLEWARE
      const data = require( '../data/client' ) const createClient = ( req, res, next ) => { const client = req.body.name data.createNewClient( client ) .then( () => { res.status( 200 ).json( { 'status': 'sucess', 'client': client } ) } ) .catch( ( err ) => { res.status( 404 ).json( { status: 'error', error: err } ) } ) .finally( () => { next() } ) } module.exports = { createClient } { "status": "error", "error": { "message": "Access denied for user ''@'localhost' (using password: YES)", "code": "ER_ACCESS_DENIED_ERROR", "errno": 1045, "sqlState": "28000", "sqlMessage": "Access denied for user ''@'localhost' (using password: YES)" } }  Esse é o erro que obtenho quando uso o dotenv, lenbrando que as informações de login estão todas certas, e que em outra função que não seja um middleware funciona.
    • Por Algorithm
      Olá a todos
       
      Eu estou codificando um exemplo de uso do GraphQL com Nodejs, mas eu estou recebendo um erro de syntax relacionado a [ : ] [ Dois Pontos ], mas eu comparei meu codigo, com o da documentação oficial e esta tudo certo. Será que alguem, conseguiria achar o erro ?
       
      OBS: Esta incluso neste post [ Exemplo Documentação, Meu Exemplo, Mensagem de Erro, Código Completo ]
       
      Exemplo Documentação
      module.exports = /* GraphQL */ ` type Client { id: ID! name: String age: Int products: [Product] } type Query { clients: [Client] client(id: ID!): Client } type Mutation { addClient(name: String!, age: Int!): Client } `  
      Meu Exemplo
      const typeDefs = ` type Pessoa { _id: ID _codigo: Float _nome: String _idade: Int _email: String } input inputPessoa { _codigo: Float _nome: String _idade: Int _email: String } type Query { resposta: String saudacao(nome: String!): String findPessoaOne(codigo: Float): Pessoa findPessoa(input: inputPessoas): [Pessoa] } type Mutation { insertPessoa(input: inputPessoa): Pessoa updatePessoa(codigo: Float, input: inputPessoa) Pessoa deletePessoa(codigo: Float) [Pessoa] } `;  
      Mensagem de Erro
      C:\Users\Core\node\node_modules\graphql\language\parser.js:1413 throw (0, _syntaxError.syntaxError)( ^ GraphQLError: Syntax Error: Expected ":", found Name "Pessoa". at syntaxError (C:\Users\Core\node\node_modules\graphql\error\syntaxError.js:15:10) at Parser.expectToken (C:\Users\Core\node\node_modules\graphql\language\parser.js:1413:40) at Parser.parseFieldDefinition (C:\Users\Core\node\node_modules\graphql\language\parser.js:847:10) at Parser.optionalMany (C:\Users\Core\node\node_modules\graphql\language\parser.js:1510:28) at Parser.parseFieldsDefinition (C:\Users\Core\node\node_modules\graphql\language\parser.js:831:17) at Parser.parseObjectTypeDefinition (C:\Users\Core\node\node_modules\graphql\language\parser.js:803:25) at Parser.parseDefinition (C:\Users\Core\node\node_modules\node_modules\graphql\language\phql\language\parser.js:171:23) at Parser.many (C:\Users\Core\node\node_modules\graphql\language\parser.js:1529:26) at Parser.parseDocument (C:\Users\Core\node\node_modules\graphql\language\parser.js:121:25) at parse (C:\Users\Core\node\node_modules\graphql\language\parser.js:32:17) { path: undefined, locations: [ { line: 26, column: 57 } ], extensions: [Object: null prototype] {} }  
      Codigo Completo
      // Requires const express = require('express'); const GraphQL_HTTP = require('express-graphql'); const { mergeSchemas } = require('@graphql-tools/schema'); // Run // const connect = MongoClient.connect(''); const app = express(); const getCode = () => { return 10 }; // GraphQL Definitions || Query and Mutation const typeDefs = ` type Pessoa { _id: ID _codigo: Float _nome: String _idade: Int _email: String } input inputPessoa { _codigo: Float _nome: String _idade: Int _email: String } type Query { resposta: String saudacao(nome: String!): String findPessoaOne(codigo: Float): Pessoa findPessoa(input: inputPessoas): [Pessoa] } type Mutation { insertPessoa(input: inputPessoa): Pessoa updatePessoa(codigo: Float, input: inputPessoa) Pessoa deletePessoa(codigo: Float) [Pessoa] } `; // Functions const resolvers = { Query: { resposta: function() { return `GraphQL Conectado com Sucesso...`; }, saudacao: function(_, args) { return `Olá ${args.nome}! Seja Muito Bem Vindo(a) a GraphQL!!!! ` }, findPessoaOne: function(_, args) { return db.collection('GraphQL-Pessoa').findOne({codigo: args.codigo}) .then((result) => { return result; }); }, findPessoa: function(_, args) { return db.collection(`GraphQL-Pessoa`).find(args.input).toArray() .then((result) => { return result; }); }, Mutation: { insertPessoa: function(_, args) { args.input.codigo = getCode(); return db.collection(`GraphQL-Pessoa`).insertOne(args.input) .then((result) => { return result.ops[0]; }); }, updatePessoa: function(_, args) { return db.collection('GraphQL-Pessoa').updateOne({codigo: args.codigo}, {$set: args.input}) .then((result) => { if(result.result.n > 0) return `Registro Alterado com Sucesso!`; else return `Ocorreu um erro ao alterar o registro`; }); }, deletePessoa: function(_, args) { return db.collection(`GraphQL-Pessoa`).deleteOne({codigo: args.codigo}) .then((result) => { if(result.result.n > 0) return `Registro Deletado com Sucesso!`; else return `Ocorreu um erro ao deletar o registro`; }); } } } }; const schema = mergeSchemas({ typeDefs: typeDefs, resolvers: resolvers }) // Listen app.listen(3005, () => { console.log(`Servidor Rodando na Porta 3005`); })  
       
      Obrigado
    • Por Ferdz-Agencia-Digital
      Estou importando o NavLink do react-router-dom e montando o meu menu assim:
       
      <Nav navbar>{createLinks(routes)}</Nav>  
      No arquivo routes.js estou montando enviando conforme código abaixo:
       
      var routes = [ { path: "/index", name: "Dashboard", icon: "ni ni-tv-2 text-primary", component: Index, tipo: 1, layout: "/admin", }, { path: "/solicitacoes-trabalho", name: "Solicitações", icon: "ni ni-cart text-orange", tipo: 1, component: Solicitacoes, layout: "/admin", }, { path: "/Clientes", name: "Clientes", icon: "ni ni-single-02 text-orange", tipo: 2, component: Clientes, layout: "/admin", }, ]; export default routes;  
      Há como na exibição eu conseguir filtrar pelo tipo e só mostrar o que for do tipo 1 ?
    • Por FerdzFernando
      Estou montando uma API para usar com BD MySQL, mas futuramente migraremos o BD para MongoDB... deverei mudar muitas coisas da API ? Terei muito retrabalho ?
       
      O que acontece é que o projeto já existe e atualmente o BD é em MySQL e APIs em PHP... mas o projeto será migrado para a stack  MERN (MongoDB, Express, React e Node)
    • Por Carcleo
      Tenho o seguinte:   const http = require("http") const host = "localhost" const port = "80" const Config = require("./Config") const server = http.createServer() server.on('request', (request, response) => { response.writeHead(200, {"Content-Type": "text/html; charset=utf-8"}) const { headers, method, url } = request Config.has("/", Config.home) response.end() }); server.listen(port, host)   Preciso arranjar uma forma de na Classe config, obter o headers mas sem passar ele via construtor tipo   New Config (headers)   dentro de    server.on()   Tentei, na classe Config importar o http novamente mas parece que só consigo o headers dentro do server    Alguma saída?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.