Alguem pode me ajudar? Capítulo 7 do livro: Aplicações Web Real-time com Node.js.
Como se o script estivesse lendo o models antes de abrir a conexão – o que não deveria ser um problema visto do mongoose – e não encontra o método model().
Aparentemente não está abrindo a conexão. Já experimentei outro script e funcionou – com o tratamento de erro, caso não se conectasse –, porém, se deveria aparecer o DB no mongo só de abrir uma conexão, não está aparecendo.
Repito o detalhe: não aparece a db ‘ntalk’ no mongodb:
mongo
show dbs
Meu terminal:
ntalk@0.0.1 start
node app.js
/Library/WebServer/Documents/node-estudos/ntalk/app.js:38
db.model(‘usuarios’, usuario);
^
TypeError: db.model is not a function
at Object. (/Library/WebServer/Documents/node-estudos/ntalk/app.js:38:8)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions…js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47
app.js
const express = require('express');
const path = require('path');
const http = require('http');
const socketIo = require('socket.io');
const consign = require('consign');
const bodyParser = require('body-parser');
const cookie = require('cookie');
const expressSession = require('express-session');
const methodOverride = require('method-override');
const mongoose = require('mongoose');
const bluebird = require('bluebird');
const config = require('./config');
const error = require('./middlewares/error');
mongoose.Promise = bluebird;
global.db = mongoose.connect('mongodb://127.0.0.1:27017/ntalk');
const app = express();
const server = http.Server(app);
const io = socketIo(server);
const store = new expressSession.MemoryStore();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(expressSession({
store,
name: config.sessionKey,
secret: config.sessionSecret
}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(methodOverride('_method'));
app.use(express.static(path.join(__dirname, 'public')));
io.use((socket, next) => {
const cookieData = socket.request.headers.cookie;
const cookieObj = cookie.parse(cookieData);
const sessionHash = cookieObj[config.sessionKey] || '';
const sessionId = sessionHash.split('.')[0].slice(2);
store.all((err, sessions) => {
const currentSession = sessions[sessionId];
if (err || !currentSession) {
return next(new Error('Acesso negado!'));
}
socket.handshake.session = currentSession;
return next();
});
});
consign({})
.include('models')
.then('controllers')
.then('routes')
.then('events')
.into(app, io)
;
app.use(error.notFound);
app.use(error.serverError);
server.listen(3000, () => console.log('Ntalk no ar'));
usuario.js (models)
const Schema = require("mongoose").Schema;
module.exports = () => {
const contato = Schema({
nome: String,
email: String
});
const usuario = Schema({
nome: {
type: String,
required: true
},
email: {
type: String,
required: true,
index: {unique: true}
},
contatos: [contato]
});
return db.model('usuarios', usuario);
}