**take node_login**
 []
**npm init -y**
 [package.json]
**npm i express backpack-core mongoose volleyball dotenv babel-preset-stage-3**
	[node_modules]
	[package.json]
	[package-lock.json]
	**(express)**     simplifie le code de node
	**(backpack)**    recharge le serveur en live (npm start)
	**(babel)**       comprend l'es6 (marche avec backpack)
	**(mongoose)**    permet d'uiliser la base de donnée Mongodb
	**(volleyball)**  informe en direct sur ce que tu fais
	**(dotenv)**      cacher les variable environnement

**----------------------**

**node_login/package.json**
remplacer    "test": "echo \"Error: no test specified\" && exit 1"
par "start": "backpack"

**node_login**
take src
touch index.js

**node_login**
npm start		//demare backpack et genere build/

**node_login**
touch .env .babelrc

**node_login/.babelrc**
{
	"presets": [
		"backpack-core/babel",
		"stage-3"
	]
}

**node_login**
mongod
(il va peut-être falloir creer le fichier db dans le dossier data a la racine "sudo mkdir -p /data/db" -p pour creer un fichier dans un dossier et aussi donner tous les droits a db "sudo chmod 777 /data/db")

**node_login/.env**
SERVER_PORT=3000
DBUrl = "mongodb://localhost/users_db"

**node_login/src/index.js**
import "dotenv/config";
import express from "express";
import volleyball from "volleyball";
import mongoose from "mongoose";
import passport from "passport";
import bcrypt from "bcrypt";

const app = express();
const {SERVER_PORT, DBUrl} = process.env;
const url = DBUrl;
const options = {promiseLibrary:Promise}

mongoose.connect(url, options);
mongoose.connection.on("connected", () => {
	console.log("the mongo is working 27017")
})

app.use(express.json());
app.use(express.urlencoded({extended:true}));
app.use(volleyball);

app.listen(SERVER_PORT, () => {
	console.log(`server is listening port... ${SERVER_PORT}`)
});

app.get('/', (req,res)=>{
	res.send('life is good with Hajar')
})

**node_login**
mkdir public src/models src/routes src/views

**node_login/src/models/user.js**
import mongoose from "mongoose";
const Schema = mongoose.Schema;
const userSchema = new Schema({
	name: {type:String, required:true},
	email: {type:String, required:true},
	username: {type:String, required:true},
	password: {type:String, required:true},
})

const User = mongoose.model("User", userSchema);
export {User};

**node_login/src/routes/routes.js**
import express from "express";
import {User} from "../models/user";

const userRouter = express.Router();

userRouter.post("/new_user", (req,res)=>{
	let newUser = new User(req.body)
	newUser.save((err,user)=>{
		if(err) res.send(err)
		res.json(user)
	})
})

export {userRouter};

**node_login/src/index.js**
ajouter :
import {userRouter} from "./routes/routes";
et
app.use("/users", userRouter)	//utiliser userRouter pour les url /users

**node_login/src/views**
touch layout.pug user_add.pug

**node_login/src/views/layout.pug**
doctype html
html
	head
		title
		link(href="/css/")

	body
		h1 formulaire
		block content

**node_login/src/views/user_add.pug**
extends layout
block content
	h2 sign in

	form(action="/users/new_user", method="post")
		div
			h5 name
			input(type="text", name="name", placeholder="enter name")
			input(type="text", name="email", placeholder="enter email")
			input(type="text", name="username", placeholder="enter username")
			input(type="password", name="password", placeholder="enter password")
			input(type="password", name="confirm", placeholder="confirm password")
		div
			h5 validate
			input(type="submit", value="enter")

**node_login/src/routes/routes.js**
ajouter
userRouter.get("/new_user", (req, res)=>{
	res.render("user_add")
})

**node_login/src/index.js**
ajouter
import path from "path";
et
app.use(express.static(path.join(__dirname+"/public")))
app.set("views", path.join(__dirname + "/views"))
app.set("view engine", "pug")



-----------------------------------------------
-----------------------------------------------

**express generator** creer le contenu de base automatiquement
**bodyparser** envois les informations d'un formulaire à mongoose


**ngrok https://nrgok.com** pour heberger le site en ligne pendant quelques heures pour le tester



--------------------------------


**base .env**
PORT=3000

**base src index.js**
import express from "express"
import "dotenv/config"
const app = express();

const { PORT } = process.env

app.listen(PORT, () => {
	console.log(`ca marche : ${ PORT }`)
})

app.get("/coucou", (req, res) => {
	res.json("coucou les amis")
})

**base src routes basic.js**
import express from "express"

const basicRouter = express.Router();

basicRouter.get("/:name", (req, res) => {    //jsute un test (:name recupere
	res.json(`je suis ${req.params.name}`)     //des parametres depuis l'url
})

export {basicRouter}

**--> base src index.js**
import { basicRouter } from "./routes/basic"

app.use("/", basicRouter)

**base src routes books.js**
import express from "express"

const booksRouter = express.Router();

booksRouter.get("/add_book", (req, res) => {
	res.json("ca marche")
})

export {booksRouter}

**------------------------------**

**create-react-app nom** creer react dans un dossier "nom"
**npm start** lance react
**take server**
**npm init -y** creer node dans server (server a la racine)
**/server npm i express backpack-core mongoose volleyball dotenv babel-preset-stage-3**
**vim /server/.babelrc** compilateur es6 pour js
	{
		"presets": [
			"backpack-core/babel",
			"stage-3"
		]
	}
**vim /server/.env**
	PORT=3001 **(3000 est deja utilise par react)**
	DBUrl= "mongodb://localhost/blog_db"
**take /server/src**
**vim /server/src/index.js**
	import "dotenv/config"
	import express from "express"
	const app = express();
	import mongoose from "mongoose"
	import volleyball from "volleyball"
	app.use(volleyball);
	const { PORT, DBUrl } = process.env;
**vim /server/package.json**
	("test"...) supression
	"start": "backapck"
**npm start** (blog/server/) lance node
**vim /server/src/index.js**
	app.listen(PORT, () => {
		console.log(`server is listening port... ${PORT}`)
	})
**vim /server/.env**
	DBUrl= "mongodb://localhost**:27017**/blog_db"
**vim /server/src/index.js**
	const options = {promiseLibrary:Promise, useNewUrlParser:true}
	
	mongoose.connect((DBUrl), options)
	mongoose.connection.on("connected", () => {
		console.log("the mongo is working 27017")
	})
**mongod** (/server)
