I have a simple Koa app. I also use mongoose, mongodb(Mlab)
I connected to mongodb. And I can find only ourCat. I see array in console. But I don't know, how I can get and show result on page. And how I can use my request to db in some middleware?
const Koa = require('koa');
const app = new Koa();
const mongoose = require('mongoose');
const mongoUri = '...';
mongoose.Promise = Promise;
function connectDB(url) {
if (!url) {
throw Error('Mongo uri is undefined');
}
return mongoose
.connect(url)
.then((mongodb) => {
return mongodb;
});
}
connectDB(mongoUri);
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log('we\'re connected!');
const Cat = mongoose.model('Cat', { name: String });
const kitty = new Cat({ name: 'Zildjian' });
kitty.save().then(() => console.log('meow'));
const ourCat = Cat.find({ name: 'Zildjian' });
ourCat.exec((er, cats) => {
if (er) {
console.log(er);
}
else if (cats) {
console.log(cats);
}
});
});
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
How I can add my answer from db to ctx.response?
Wrap your database initialization into a Promise:
const Cat = mongoose.model('Cat', { name: String });
function getCats() {
return new Promise((resolve, reject) => {
const ourCat = Cat.find({ name: 'Zildjian' });
ourCat.exec((er, cats) => {
if (er) { reject(er); }
else { resolve(cats); }
});
});
}
So then you can just do:
const connection = connectDB(mongoUri);
app.use(async ctx => {
await connection;
ctx.body = await getCats();
});
Have a look at this repo:
https://github.com/jsnomad/koa-restful-boilerplate
It is quite updated and you will get your mind around the koa-mongoose stack... I think it will answer most of your questions; otherwise ask in the comments and will be able to help you :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With