diff --git a/FintechSG-FrontendBackend.JPG b/FintechSG-FrontendBackend.JPG new file mode 100644 index 0000000..de3b3e2 Binary files /dev/null and b/FintechSG-FrontendBackend.JPG differ diff --git a/README.md b/README.md index 9fdc22e..ebb7164 100644 --- a/README.md +++ b/README.md @@ -1,158 +1,57 @@ -# Prepare Full Stack App - -## Pre Requisite -* Install React : `sudo npm -g install create-react-app` -* Install Express : `sudo npm install -g express-generator` -* Install CORS : `sudo npm install -g save cors` - -## Procedure -1. Create Project Folder. Eg. fullstackapp -2. Navigate to the folder -3. Create / prepare Backend project - ``` - $ express --view=pug backend - $ cd backend - $ npm install - ``` -4. Create Frontend - ``` - $ npx create-react-app frontend - ``` - -## Check Backend function -1. Navigate to backend folder -2. Start the server - ``` - $ npm start - ``` -3. Use browser to navigate [http://localhost:3000](http://localhost:3000) -4. The page should display "Express", "Welcome to express" -5. Press ctrl+c to stop the backend - - -## Check the frontend function -1. Navigate to frontend folder -2. Start the server - ``` - $ npm start - ``` -3. Open browser and navigate to [http://localhost:3001](http://localhost:3001) -4. The page should display "React welcome page with react logo" -5. Press `ctrl+c` to stop the frontend - - -## Editing Backend in VScode -1. Launch VCcode from project folder `fullstack` -2. Navigate to backend -3. Open the file `/bin/www` -4. Change server port to 7000 - ``` - var port = normalizePort(process.env.PORT || '3000'); - app.set('port', port); - ``` -5. Goto `routes` folder -6. Create a new file called `mypage.js` - ``` - var express = require('express'); // import - var router = express.Router(); - - var mystr = "I am sending this DATA from backend to Frontend"; - - /* GET my page */ - router.get('/', function(req, res, next) { - res.send(mystr); - }); - - module.exports = router; - ``` -7. Open app.js and `add this line` - ``` - var createError = require('http-errors'); - var express = require('express'); - var path = require('path'); - var cookieParser = require('cookie-parser'); - var logger = require('morgan'); - var cors = require("cors"); // add this line - - var indexRouter = require('./routes/index'); - var usersRouter = require('./routes/users'); - var mypageRouter = require('./routes/mypage'); // add this line - - var app = express(); - - // view engine setup - app.set('views', path.join(__dirname, 'views')); - app.set('view engine', 'pug'); - - app.use(logger('dev')); - app.use(express.json()); - app.use(express.urlencoded({ extended: false })); - app.use(cookieParser()); - app.use(express.static(path.join(__dirname, 'public'))); - - app.use(cors()); // add this line - app.use('/', indexRouter); - app.use('/users', usersRouter); - app.use('/mypage', mypageRouter); // add this line - - // catch 404 and forward to error handler - app.use(function(req, res, next) { - next(createError(404)); - }); - ``` -8. Install cors locally. Navigate to `backend` folder - ``` - $ sudo npm install cors - ``` -9. Open browser and navigate to [http://localhost:7000/mypage](http://localhost:7000/mypage). You should see - ``` - I am sending this DATA from backend to Frontend - ``` - -## Editing Frontend in VSCode -1. Navigate to frontend -2. Open `/src/App.js`. Delete everything and copy the following - ``` - import React from 'react'; - import logo from './logo.svg'; - import './App.css'; - - class App extends React.Component { - constructor(props){ - super(props); - this.state = { serverResponse: "" }; - } - - callAPIServer() { - fetch("http://localhost:7000/mypage") - .then(res => res.text()) - .then(res => this.setState({ serverResponse: res })) - .catch(err => err); - } - - componentDidMount() { // react lifecycle method componentDidMount() - // will execute the callAPIServer() methods afteer the component mounts - this.callAPIServer(); - } - - render() { - return ( -
-
- logo -

Welcome to FintechSG React Course

-

{this.state.serverResponse}

-
-
- ) - } - } - - export default App; - ``` -9. Open browser and navigate to [http://localhost:3000](http://localhost:3000). You should see - ``` - Welcome to FintechSG React Course - - I am sending this DATA from backend to Frontend - ``` \ No newline at end of file +# Frontend - Backend + +## Server Client Project + +### Prerequisite + +* Run cmd in administrator mode +* npm - node package manager +* Install `React` for frontend +``` +$ npm install -g create-react-app +``` +* Install `express` for backend +``` +$ npm install -g express-generator +``` +* Install `cors` ??for backend +``` +$ npm install -g save cors +``` + + +## Prepare Client (Frontend) + +* run npx (node package execute) from command line +``` +$ npx create-react-app frontend +``` +* navigate to `frontend` folder. start +``` +$ cd frontend +$ npm start +``` + +## Prepare Server (Backend) + +* run from command line +``` +$ express --view=pug backend +$ cd backend + +// optional : something global install not working +$ npm install cors + +// install dependencies defined in package.json +$ npm install +``` +* navigate to `backend` folder. start +``` +$ cd backend +$ npm start +``` + +### Example + +1. [NUSMoney](nusmoney.md) frontend +2. [Fullstack](fullstack.md) process diff --git a/fullstack.md b/fullstack.md new file mode 100644 index 0000000..9fdc22e --- /dev/null +++ b/fullstack.md @@ -0,0 +1,158 @@ +# Prepare Full Stack App + +## Pre Requisite +* Install React : `sudo npm -g install create-react-app` +* Install Express : `sudo npm install -g express-generator` +* Install CORS : `sudo npm install -g save cors` + +## Procedure +1. Create Project Folder. Eg. fullstackapp +2. Navigate to the folder +3. Create / prepare Backend project + ``` + $ express --view=pug backend + $ cd backend + $ npm install + ``` +4. Create Frontend + ``` + $ npx create-react-app frontend + ``` + +## Check Backend function +1. Navigate to backend folder +2. Start the server + ``` + $ npm start + ``` +3. Use browser to navigate [http://localhost:3000](http://localhost:3000) +4. The page should display "Express", "Welcome to express" +5. Press ctrl+c to stop the backend + + +## Check the frontend function +1. Navigate to frontend folder +2. Start the server + ``` + $ npm start + ``` +3. Open browser and navigate to [http://localhost:3001](http://localhost:3001) +4. The page should display "React welcome page with react logo" +5. Press `ctrl+c` to stop the frontend + + +## Editing Backend in VScode +1. Launch VCcode from project folder `fullstack` +2. Navigate to backend +3. Open the file `/bin/www` +4. Change server port to 7000 + ``` + var port = normalizePort(process.env.PORT || '3000'); + app.set('port', port); + ``` +5. Goto `routes` folder +6. Create a new file called `mypage.js` + ``` + var express = require('express'); // import + var router = express.Router(); + + var mystr = "I am sending this DATA from backend to Frontend"; + + /* GET my page */ + router.get('/', function(req, res, next) { + res.send(mystr); + }); + + module.exports = router; + ``` +7. Open app.js and `add this line` + ``` + var createError = require('http-errors'); + var express = require('express'); + var path = require('path'); + var cookieParser = require('cookie-parser'); + var logger = require('morgan'); + var cors = require("cors"); // add this line + + var indexRouter = require('./routes/index'); + var usersRouter = require('./routes/users'); + var mypageRouter = require('./routes/mypage'); // add this line + + var app = express(); + + // view engine setup + app.set('views', path.join(__dirname, 'views')); + app.set('view engine', 'pug'); + + app.use(logger('dev')); + app.use(express.json()); + app.use(express.urlencoded({ extended: false })); + app.use(cookieParser()); + app.use(express.static(path.join(__dirname, 'public'))); + + app.use(cors()); // add this line + app.use('/', indexRouter); + app.use('/users', usersRouter); + app.use('/mypage', mypageRouter); // add this line + + // catch 404 and forward to error handler + app.use(function(req, res, next) { + next(createError(404)); + }); + ``` +8. Install cors locally. Navigate to `backend` folder + ``` + $ sudo npm install cors + ``` +9. Open browser and navigate to [http://localhost:7000/mypage](http://localhost:7000/mypage). You should see + ``` + I am sending this DATA from backend to Frontend + ``` + +## Editing Frontend in VSCode +1. Navigate to frontend +2. Open `/src/App.js`. Delete everything and copy the following + ``` + import React from 'react'; + import logo from './logo.svg'; + import './App.css'; + + class App extends React.Component { + constructor(props){ + super(props); + this.state = { serverResponse: "" }; + } + + callAPIServer() { + fetch("http://localhost:7000/mypage") + .then(res => res.text()) + .then(res => this.setState({ serverResponse: res })) + .catch(err => err); + } + + componentDidMount() { // react lifecycle method componentDidMount() + // will execute the callAPIServer() methods afteer the component mounts + this.callAPIServer(); + } + + render() { + return ( +
+
+ logo +

Welcome to FintechSG React Course

+

{this.state.serverResponse}

+
+
+ ) + } + } + + export default App; + ``` +9. Open browser and navigate to [http://localhost:3000](http://localhost:3000). You should see + ``` + Welcome to FintechSG React Course + + I am sending this DATA from backend to Frontend + ``` \ No newline at end of file diff --git a/homepage.JPG b/homepage.JPG new file mode 100644 index 0000000..289b87f Binary files /dev/null and b/homepage.JPG differ diff --git a/nusmoney.md b/nusmoney.md new file mode 100644 index 0000000..0591d0a --- /dev/null +++ b/nusmoney.md @@ -0,0 +1,193 @@ +# NUSMoney Frontend + +1. Create react project + ``` + npx create-react-app nusmoney + ``` +2. Replace `App.js, App.css,brand-logo.png` reference code +* App.js + ```javascript + import React from "react"; + import logo from "./brand-logo.png" + import "./App.css"; + + class App extends React.Component { + constructor(props) { + super(props); + this.state = { + newBank: "", + bankList: [] + }; + } + + addBank(bankName) { + if (bankName !== "") { + const newBank = { + id: Date.now(), + value: bankName, + isDone: false + }; + const bankList = [...this.state.bankList]; //get the Banklist from state + bankList.push(newBank); //add new back to the list + + this.setState({ //update the state + bankList, + newBank: "" + }); + } + } + + deleteItem(id) { + const bankList = [...this.state.bankList]; + //const updatedbankList = bankList.filter(item => item.id !== id); + const updatedbankList = bankList.filter(function(item){return item.id !== id}); + this.setState({ bankList: updatedbankList }); + } + + updateInput(input) { + this.setState({ newBank: input }); + } + + render() { + return ( +
+ brand logo +

Fintech@SG NUSmoney App

+
+ Add your new Bank.... +
+ this.updateInput(e.target.value)} + /> + +
+
    + {this.state.bankList.map( (item) => { + return ( +
  • + + {item.value} + +
  • + ) + } + )} +
  • + DBS Bank + +
  • +
+
+
+
+ ); + } + } + + export default App; + ``` + +* App.css + ```css + body { + background: #97d5e8; + font-family: "Montserrat", sans-serif; + font-size: 20px; + } + + .logo { + display: block; + margin-left: auto; + margin-right: auto; + } + + .input-text { + display: inline; + margin: 0; + border: none; + border-radius: 0.4rem; + padding: 10px; + } + + .list ul li button { + position: absolute; + right: 0%; + background: #f34541; + color: #fff !important; + text-transform: uppercase; + text-decoration: none; + margin-left: 10px; + margin-right: 10px; + padding: 10px; + border-radius: 0.4rem; + display: inline-block; + border: none; + } + + .add-btn { + color: #fff !important; + text-transform: uppercase; + text-decoration: none; + background: #7313cb; + margin: 20px; + padding: 10px; + border-radius: 0.4rem; + display: inline-block; + border: none; + } + + .app-title { + text-align: center; + color: #fff; + font-size: 70px; + } + ul { + /* remove default padding and margin from ul*/ + margin: 0px; + padding: 0px; + } + .list ul li { + display: block; + width: 100%; + text-decoration: none; + color: #000000; + background-color: #ffffff; + line-height: 30px; + border-bottom-style: solid; + border-bottom-width: 1px; + border-bottom-color: #cccccc; + padding: 10px; + position: relative; + } + + .container { + color: #fff; + max-width: 500px; + margin: auto; + } + ``` + +3. Navigate to nusmoney. Start the server + ``` + npm start + ``` +4. Navigate browser to [http://localhost:3000](http://localhost:3000) +5. The page should display + +![](homepage.JPG)