27
loading...
This website collects cookies to deliver better user experience
npm init
npm install express dotenv mongoose
const express = require('express'),
config = require('./app'),
path = require("path");
app = express(),
dotenv = require('dotenv').config();
app = config(app);
app.set("port", process.env.PORT || 5000);
// Connect mongo
const mongoose = require('mongoose');
mongoose.connect(process.env.MONGODB_URI, {
useUnifiedTopology: true,
useNewUrlParser: true,
});
mongoose.connection.on("open", function () {
console.log("Mongoose Connected Successfully!");
});
mongoose.connection.on("error", function(err) {
console.log("Could not connect to mongo server!");
return console.log(err.message);
});
// Server
const server = app.listen(app.get("port"), function () {
console.log("Server up: http://localhost:" + app.get("port"));
});
const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const app = express();
// view engine setup
module.exports = function(app) {
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
const api = require('./routes/api');
app.use('/api/v1', api);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
return app;
};
MONGODB_URI=Mongodb URI connection string
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
//create schema for todo
const TodoSchema = new Schema({
todo: {
type: String,
required: [true, 'The todo text field is required']
}
})
//create model for todo
const Todos = mongoose.model('todo', TodoSchema);
module.exports = Todos;
const express = require('express');
const router = express.Router();
const Todo = require('../models/todos')
// Get all Todos
router.get('/todos', async (req, res) => {
//this will return all the data, exposing only the id and todo field to the client
try {
const todos = await Todo.find({}, 'todo')
if (!todos) {
return res.status(400).json({
success: false,
message: 'Todos not retrieved',
todos: []
})
}
return res.status(200).json({
success: true,
message: 'Todos retrieved successfully',
todos: todos
})
} catch (error) {
return res.status(400).json({
success: false,
message: error.message
})
}
});
// Create a Todo
router.post('/todos', async (req, res) => {
try {
const { todo } = req.body
const todos = await Todo.create({todo})
if (!todos) {
return res.status(400).json({
success: false,
message: 'Problem creating Todo',
todo: null
})
}
return res.status(200).json({
success: true,
message: 'Successfully created Todo',
todo: todos
})
} catch (error) {
return res.status(400).json({
success: false,
message: error.message
})
}
})
// Update a Todo
router.patch('/todos/:id', async (req, res) => {
try {
const { todo } = req.body
const update = await Todo.findOneAndUpdate({_id: req.params.id}, {todo})
if (!update) {
return res.status(400).json({
success: false,
message: 'Not successfully updated'
})
}
return res.status(200).json({
success: true,
message: 'Todo successfully updated'
})
} catch (error) {
return res.status(400).json({
success: false,
message: error.message
})
}
})
// Delete a Todo
router.delete('/todos/:id', async (req, res) => {
try {
const deleteTodo = await Todo.findOneAndDelete({_id: req.params.id})
if (!deleteTodo) {
return res.status(400).json({
success: false,
message: 'Todo not deleted'
})
}
return res.status(200).json({
success: true,
message: 'Todo successfully deleted'
})
} catch (error){
return res.status(400).json({
success: false,
message: error.message
})
}
})
module.exports = router;