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