backend-scaffold-cli 1.5.1 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +106 -1
- package/package.json +5 -2
package/bin/cli.js
CHANGED
|
@@ -7,8 +7,9 @@ const inquirer = require('inquirer');
|
|
|
7
7
|
const fs = require('fs-extra');
|
|
8
8
|
const path = require('path');
|
|
9
9
|
const { execSync } = require('child_process');
|
|
10
|
+
const packageJson = require('../package.json');
|
|
10
11
|
|
|
11
|
-
const version =
|
|
12
|
+
const version = packageJson.version;
|
|
12
13
|
|
|
13
14
|
program
|
|
14
15
|
.version(version)
|
|
@@ -82,6 +83,7 @@ program
|
|
|
82
83
|
}
|
|
83
84
|
if(answers.useAxios){
|
|
84
85
|
createAxiosUtil(projectPath);
|
|
86
|
+
createAuthController(projectPath);
|
|
85
87
|
}
|
|
86
88
|
|
|
87
89
|
console.log(chalk.cyan(' Initializing git repository...'));
|
|
@@ -464,6 +466,7 @@ const createRouteFiles = (projectPath, answers) => {
|
|
|
464
466
|
const routes = `const express = require('express');
|
|
465
467
|
const router = express.Router();
|
|
466
468
|
${answers.useAuth ? "const authenticateToken = require('../middleware/auth');" : ''}
|
|
469
|
+
${answers.useAuth ? "const {register,login} = require('../controllers/authController');" : ''}
|
|
467
470
|
${answers.useFileUpload ? "const upload = require('../middleware/upload');" : ''}
|
|
468
471
|
|
|
469
472
|
// Public routes
|
|
@@ -471,6 +474,13 @@ router.get('/health', (req, res) => {
|
|
|
471
474
|
res.json({ status: 'API is running' });
|
|
472
475
|
});
|
|
473
476
|
|
|
477
|
+
${answers.useAuth? `
|
|
478
|
+
// Auth routes
|
|
479
|
+
// Register and Login routes
|
|
480
|
+
router.post('/auth/register', register);
|
|
481
|
+
router.post('/auth/login', login);
|
|
482
|
+
` : ''}
|
|
483
|
+
|
|
474
484
|
${answers.useAuth ? `
|
|
475
485
|
// Protected routes
|
|
476
486
|
router.get('/protected', authenticateToken, (req, res) => {
|
|
@@ -679,6 +689,101 @@ function createUserModel(projectPath) {
|
|
|
679
689
|
|
|
680
690
|
|
|
681
691
|
|
|
692
|
+
function createAuthController(projectPath) {
|
|
693
|
+
const authController = `const jwt= require('jsonwebtoken');
|
|
694
|
+
const User=require('../models/User');
|
|
695
|
+
const { ErrorHandler } = require('../middleware/errorHandler');
|
|
696
|
+
|
|
697
|
+
//generate JWT token
|
|
698
|
+
const generateToken = (userId) => {
|
|
699
|
+
return jwt.sign({ id: userId }, process.env.JWT_SECRET, {
|
|
700
|
+
expiresIn: process.env.JWT_EXPIRE || '7d'
|
|
701
|
+
});
|
|
702
|
+
};
|
|
703
|
+
|
|
704
|
+
|
|
705
|
+
//register user
|
|
706
|
+
const register= async(req,res,next) =>{
|
|
707
|
+
try{
|
|
708
|
+
const {name,email,password}=req.body;
|
|
709
|
+
|
|
710
|
+
const existingUser= await User.findOne({email});
|
|
711
|
+
if(existingUser){
|
|
712
|
+
return next(new ErrorHandler('Email already Registered',400));
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
const user= await User.create({name,email,password});
|
|
716
|
+
const tocken= generateToken(user._id);
|
|
717
|
+
|
|
718
|
+
res.status(201).json({
|
|
719
|
+
success:true,
|
|
720
|
+
message:'User registered successfully',
|
|
721
|
+
token,
|
|
722
|
+
user:{
|
|
723
|
+
id:user._id,
|
|
724
|
+
name:user.name,
|
|
725
|
+
email:user.email
|
|
726
|
+
}
|
|
727
|
+
});
|
|
728
|
+
}catch(error){
|
|
729
|
+
next(error);
|
|
730
|
+
}
|
|
731
|
+
};
|
|
732
|
+
|
|
733
|
+
|
|
734
|
+
|
|
735
|
+
//login user
|
|
736
|
+
const login =async(req,res,next) =>{
|
|
737
|
+
try{
|
|
738
|
+
const {email,password}=req.body;
|
|
739
|
+
|
|
740
|
+
const user=await User.findOne({email}).select('+password');
|
|
741
|
+
if(!user){
|
|
742
|
+
return next(new ErrorHandler('Invalid email or password',401));
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
const isMatch= await user.comparePassword(password);
|
|
746
|
+
if(!isMatch){
|
|
747
|
+
return next(new ErrorHandler('Invalid email or password',401));
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
const token=generateToken(user._id);
|
|
751
|
+
|
|
752
|
+
res.status(200).json({
|
|
753
|
+
success:true,
|
|
754
|
+
message:'User logged in successfully',
|
|
755
|
+
token,
|
|
756
|
+
user:{
|
|
757
|
+
id:user._id,
|
|
758
|
+
name:user.name,
|
|
759
|
+
email: user.email
|
|
760
|
+
}
|
|
761
|
+
});
|
|
762
|
+
}catch(error){
|
|
763
|
+
next(error);
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
|
|
768
|
+
module.exports = {
|
|
769
|
+
register,
|
|
770
|
+
login
|
|
771
|
+
};
|
|
772
|
+
|
|
773
|
+
`;
|
|
774
|
+
|
|
775
|
+
|
|
776
|
+
|
|
777
|
+
fs.writeFileSync(
|
|
778
|
+
path.join(projectPath, 'src/controllers/authController.js'),
|
|
779
|
+
authController
|
|
780
|
+
);
|
|
781
|
+
|
|
782
|
+
console.log(chalk.green('Auth controller created'));
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
|
|
786
|
+
|
|
682
787
|
function createAxiosUtil(projectPath){
|
|
683
788
|
const axiosUtil = ` const axios = require('axios');
|
|
684
789
|
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "backend-scaffold-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "CLI tool to scaffold Express.js backend projects with MongoDB, middleware, and common setup",
|
|
5
5
|
"main": "bin/cli.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"create-express-backend": "./bin/cli.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"test": "
|
|
10
|
+
"test": "jest"
|
|
11
11
|
},
|
|
12
12
|
"keywords": [
|
|
13
13
|
"express",
|
|
@@ -32,5 +32,8 @@
|
|
|
32
32
|
"commander": "^11.0.0",
|
|
33
33
|
"fs-extra": "^11.1.0",
|
|
34
34
|
"inquirer": "^8.2.5"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"jest": "^30.4.2"
|
|
35
38
|
}
|
|
36
39
|
}
|