├── .env ├── .gitignore ├── db.config.js ├── db.js ├── index.js ├── package.json └── routes.js /.env: -------------------------------------------------------------------------------- 1 | AWS_ACCESS_KEY_ID = "PASTE_YOUR_ACCESS_KEY" 2 | AWS_SECRET_ACCESS_KEY = "PASTE_YOUR_SECRET_ACCESS_KEY" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | yarn.lock -------------------------------------------------------------------------------- /db.config.js: -------------------------------------------------------------------------------- 1 | import AWS from 'aws-sdk' 2 | 3 | AWS.config.update({ 4 | region: "us-east-1", 5 | accessKeyId: process.env.AWS_ACCESS_KEY_ID, 6 | secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY 7 | }) 8 | 9 | const db = new AWS.DynamoDB.DocumentClient() 10 | 11 | const Table = 'users' 12 | 13 | export { 14 | db, 15 | Table 16 | } -------------------------------------------------------------------------------- /db.js: -------------------------------------------------------------------------------- 1 | import {db, Table} from './db.config.js' 2 | 3 | // Create or Update users 4 | const createOrUpdate = async (data = {}) =>{ 5 | const params = { 6 | TableName: Table, 7 | Item: data 8 | } 9 | 10 | try{ 11 | await db.put(params).promise() 12 | return { success: true } 13 | } catch(error){ 14 | return { success: false} 15 | } 16 | } 17 | 18 | // Read all users 19 | const readAllUsers = async()=>{ 20 | const params = { 21 | TableName: Table 22 | } 23 | 24 | try{ 25 | const { Items = [] } = await db.scan(params).promise() 26 | return { success: true, data: Items } 27 | 28 | } catch(error){ 29 | return { success: false, data: null } 30 | } 31 | 32 | } 33 | 34 | // Read Users by ID 35 | const getUserById = async (value, key = 'id') => { 36 | const params = { 37 | TableName: Table, 38 | Key: { 39 | [key]: parseInt(value) 40 | } 41 | } 42 | try { 43 | const { Item = {} } = await db.get(params).promise() 44 | return { success: true, data: Item } 45 | } catch (error) { 46 | return { success: false, data: null} 47 | } 48 | } 49 | 50 | // Delete User by ID 51 | const deleteUserById = async(value, key = 'id' ) => { 52 | const params = { 53 | TableName: Table, 54 | Key: { 55 | [key]: parseInt(value) 56 | } 57 | } 58 | 59 | try { 60 | await db.delete(params).promise() 61 | return { success: true } 62 | 63 | } catch (error) { 64 | return{ success: false } 65 | } 66 | } 67 | 68 | 69 | export { 70 | createOrUpdate, 71 | readAllUsers, 72 | getUserById, 73 | deleteUserById 74 | } -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | import express from 'express' 2 | import bodyParser from 'body-parser' 3 | import dotenv from 'dotenv' 4 | 5 | import user from './routes.js' 6 | 7 | dotenv.config() 8 | 9 | const app = express() 10 | 11 | app.use(bodyParser.json()) 12 | 13 | app.get("/", (req, res)=>{ 14 | res.json({"Hi":"Hello World"}) 15 | }) 16 | 17 | app.use('/api', user) 18 | 19 | const PORT = 8000 20 | 21 | app.listen(PORT, () => { 22 | console.log(`Port listening on ${PORT}`) 23 | }) 24 | 25 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aws-dynamodb-crud-operations-in-nodejs", 3 | "type": "module", 4 | "version": "1.0.0", 5 | "main": "index.js", 6 | "license": "MIT", 7 | "dependencies": { 8 | "aws-sdk": "^2.1181.0", 9 | "body-parser": "^1.20.0", 10 | "express": "^4.18.1" 11 | }, 12 | "devDependencies": { 13 | "dotenv": "^16.0.1", 14 | "nodemon": "^2.0.19" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /routes.js: -------------------------------------------------------------------------------- 1 | import express from 'express' 2 | import { createOrUpdate, deleteUserById, getUserById, readAllUsers } from './db.js' 3 | 4 | const router = express.Router() 5 | 6 | // READ ALL Users 7 | router.get('/users', async(req, res) => { 8 | const { success, data } = await readAllUsers() 9 | 10 | if(success){ 11 | return res.json({success, data}) 12 | } 13 | return res.status(500).json({success:false, messsage: "Error"}) 14 | }) 15 | 16 | // Get User by ID 17 | router.get('/user/:id', async(req, res) => { 18 | const { id } = req.params 19 | const { success, data } = await getUserById(id) 20 | console.log(data) 21 | if(success){ 22 | return res.json({success, data}) 23 | } 24 | 25 | return res.status(500).json({success: false, message: "Error"}) 26 | }) 27 | 28 | 29 | // Create User 30 | router.post('/user', async(req, res) => { 31 | const { success, data } = await createOrUpdate(req.body) 32 | 33 | if(success){ 34 | return res.json({success, data}) 35 | } 36 | 37 | return res.status(500).json({success: false, message: 'Error'}) 38 | }) 39 | 40 | 41 | // Update User by ID 42 | router.put('/user/:id', async(req, res) => { 43 | const user = req.body 44 | const { id } = req.params 45 | user.id = parseInt(id) 46 | 47 | const { success, data } = await createOrUpdate(user) 48 | 49 | if(success){ 50 | return res.json({success, data}) 51 | } 52 | 53 | return res.status(500).json({success: false, message: "Error"}) 54 | }) 55 | 56 | 57 | // Delete User by Id 58 | router.delete('/user/:id', async (req, res) => { 59 | const { id } = req.params 60 | const { success, data } = await deleteUserById(id) 61 | if (success) { 62 | return res.json({ success, data }) 63 | } 64 | return res.status(500).json({ success: false, message: 'Error'}) 65 | }) 66 | 67 | 68 | 69 | 70 | export default router --------------------------------------------------------------------------------