REST API with nodejs + expresjs + mysql

 

Buat Tabel User

CREATE TABLE `users` (
  `id` int(10) UNSIGNED NOT NULL,
  `username` varchar(80) NOT NULL,
  `email` varchar(254) NOT NULL,
  `password` varchar(60) NOT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Indexes for dumped tables
--

--
-- Indeks untuk tabel `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `users_username_unique` (`username`),
  ADD UNIQUE KEY `users_email_unique` (`email`);

--
-- AUTO_INCREMENT untuk tabel yang dibuang
--

--
-- AUTO_INCREMENT untuk tabel `users`
--
ALTER TABLE `users`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Membuat Project

mkdir restapinodejs
cd restaponodejs
npm init

*Mengenerate file package.json untuk pengaturan aplikasi

npm install --save express mysql body-parser bcryptjs

*Menginstall package express, mysql dan body-parser

server.js

var express = require('express'),
     app = express(),
     port = process.env.PORT || 3000,
     bodyParser = require('body-parser'),
     controller = require('./controller');

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

var routes = require('./routes');
routes(app);

app.listen(port);
console.log('RESTful API server started on: ' + port);

conn.js

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "",
  database: "api"
});

con.connect(function (err){
    if(err) throw err;
});

module.exports = con;

controller.js

'use strict';

var response = require('./res');
var connection = require('./conn');
var bcrypt = require('bcryptjs');


// index
exports.index = function (req, res) {
     response.send("REST API with Express","", res)
};

// get
exports.users = function (req, res) {
     connection.query('SELECT * FROM users', function (error, rows, fields) {
          if (error) {
               console.log(error)
          } else {
               response.send("Data Found",rows, res)
          }
     });
};


// post register
exports.register = function (req, res) {

     var username = req.body.username;
     var email = req.body.email;
     var password = req.body.password;
     var hash = bcrypt.hashSync(password);
     var now = new Date();
     

     connection.query('INSERT INTO users(username, email, password, created_at, updated_at) values (?,?,?,?,?)',
          [username, email, hash, now, now],
          function (error, rows, fields) {
               if (error) {
                    console.log(error)
                    response.validateError(error,res)
               } else {
                    response.send("Register Success!",rows, res)
               }
          });
};

// post login
exports.login = function (req, res) {

     var username = req.body.username;
     var password = req.body.password;

     connection.query('SELECT * FROM users where username = ?',
          [username],
          function (error, rows, fields) {
               if (error) {
                    console.log(error)
                    response.validateError(error, res)
               } else {

                    if (rows.length==0){
                         response.badCredentials(res);
                    }else{
                         var storepass = rows[0]['password']
                         var cekpassword = bcrypt.compareSync(password, storepass);

                         console.log("password : "+ password)
                         console.log("storepass : " + storepass)
                         console.log("cekpassword  : " + cekpassword)

                         if(cekpassword){
                              response.send("Login Success!", rows, res)
                         }else{
                              response.validateError("Invalid Password", res)
                         }
        
                    }
                    
               }
          });
};

res.js

'use strict';

exports.send = function (message, data, res) {
     var response = {
          'status': 200,
          'message':message,
          'data': data
     };
     res.json(response);
     res.end();
};

exports.notFound = function (message, res) {
     var response = {
          'status': 404,
          'message': message + " not found",
     };
     res.json(response);
     res.end();
};


exports.exists = function (message, res) {
     var response = {
          'status': 400,
          'message': message + " already exists",
     };
     res.json(response);
     res.end();
};

exports.validateError = function ($errors, res) {
     var response = {
          'status': 422,
          'message': "Validation errors",
          'errors' : $errors,
     };
     res.json(response);
     res.end();
};

exports.internalError = function (res) {
     var response = {
          'status': 500,
          'message': "Internal server error",
     };
     res.json(response);
     res.end();
};

exports.badCredentials = function (res) {
     var response = {
          'status': 401,
          'message': "Username or password is wrong",
     };
     res.json(response);
     res.end();
};

routes.js

 

'use strict';

module.exports = function (app) {
     var c = require('./controller');

     app.route('/').get(c.index);
     app.route('/users').get(c.users);
     app.route('/register').post(c.register);
     app.route('/login').post(c.login);

};

Menjalankan server

node server.js

REST API with nodejs + expresjs + mysql

By flutter id

REST API with nodejs + expresjs + mysql

REST API with nodejs + expresjs + mysql

  • 913