mysql و node.js زا ه{افتسا اب web api {اجیا : هلاقم ناونع ... ·...

15
ن مقاله : عنوایجاد اWeb API ده ازستفا ا باNode.js وMySQL یه تهویسان مرجع تخصصی برنامه ن وتنظیم کننده :www.barnamenevisan.org [email protected] ین مقاله ، به در ایجاد یکرسی چگونگی ا برRESTful API ساده باده ازستفا اnode.js وMySQL وان به عنداخت . و در خواهیم پره داده پایگارسیت مرحله به مرحله به بر بصوراهیم داد ولی را ارائه خومه ی مقاله مثا ادا آن خواهیم پرداخت. یجاد میدانید ا آیاRESTful API ده ازستفا ا باnode.js وExpress Template ن میباشد ؟؟ه راحتی آب خورد ب عملیاتاده سازی با پیر خود را ما کاCraete , Read , Update , Delete) CRUD) ده ازستفا ا باNode.s شروع خواهیم کرد. API ست های درخوا ماGET, POST , PUT , DELETE ا خواهد پذیرفت ر. یجاد برای اوع به کار قبل از شرAPI ده ازستفا ا باNode.js زیر به ، درعمال شوندید اماتی که با از تنظیکسری یین شما به کرد . همچن خواهیمشاره اMySQL ارید نیاز د. نظیمات ت: node.js را نصب کنید. • Express generator صب کنید را ن. cmd> npm install express -generator -g

Upload: others

Post on 30-May-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MySQL و Node.js زا ه{افتسا اب Web API {اجیا : هلاقم ناونع ... · تفریذپ دهاوخ ارget, post , put , delete یاه تساوخر{ ام . api {رک

MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :

وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه

www.barnamenevisan.org [email protected]

به عنوان MySQL و node.js استفاده از ساده با RESTful API بررسی چگونگی ایجاد یک در این مقاله ، به

آن ادامه ی مقاله مثالی را ارائه خواهیم داد و بصورت مرحله به مرحله به بررسی پایگاه داده خواهیم پرداخت . و در

. خواهیم پرداخت

به راحتی آب خوردن میباشد ؟؟ Express Template و node.js با استفاده از RESTful API آیا میدانید ایجاد

شروع Node.s با استفاده از (Craete , Read , Update , Delete) CRUD ما کار خود را با پیاده سازی عملیات

. را خواهد پذیرفت GET, POST , PUT , DELETE ما درخواست های API . خواهیم کرد

یکسری از تنظیماتی که باید اعمال شوند ، در زیر به Node.js با استفاده از API قبل از شروع به کار برای ایجاد

. نیاز دارید MySQL اشاره خواهیم کرد . همچنین شما به

: تنظیمات

node.js• کنید را نصب.

• Express generator را نصب کنید .

cmd> npm install express -generator -g

Page 2: MySQL و Node.js زا ه{افتسا اب Web API {اجیا : هلاقم ناونع ... · تفریذپ دهاوخ ارget, post , put , delete یاه تساوخر{ ام . api {رک

MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :

وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه

www.barnamenevisan.org [email protected]

• Express Template از Node.js را نصب کنید :

1 cmd> express

میکنیم . کد باال یک پروژه ساده استفاده Node.js برای Express Template در اینجا ، در این مثال ، ما از

Node.js را برای ما آماده میکند

Page 3: MySQL و Node.js زا ه{افتسا اب Web API {اجیا : هلاقم ناونع ... · تفریذپ دهاوخ ارget, post , put , delete یاه تساوخر{ ام . api {رک

MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :

وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه

www.barnamenevisan.org [email protected]

: نصب کنید MySQL وابستگی ها را برای •

cmd> npm install mysql --save

که وابستگی های آن را در پروژه به عنوان پایگاه داده استفاده خواهیم کرد ، بنابراین نیاز است MYSQL ما از

. به پروژه اضافه میکنیم Package.Json وابستگی ها را در فایل کنیم . با نوشتن دستور باال ،پیاده سازی

• Cors را نصب کنید :

cmd> npm install cors --save

بسیار مهم است ، Web API در زمان ایجاد (cross -origin resource sharing) CORSهمانطور که میدانید ،

. اصافه میکنیم Package.Json فایل در واقع با نوشتن دستور باال وابستگی ها را به

Page 4: MySQL و Node.js زا ه{افتسا اب Web API {اجیا : هلاقم ناونع ... · تفریذپ دهاوخ ارget, post , put , delete یاه تساوخر{ ام . api {رک

MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :

وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه

www.barnamenevisan.org [email protected]

: را نصب کنید Package.json حال تمام وابستگی های فایل •

cmd> npm

: تنظیم کنید MySQL جداول را در

script file

for table[code language = "sql"]

CREATE TABLE IF NOT EXISTS `task` (`Id`

varchar(50) NOT NULL, `Title`

varchar(500) DEFAULT NULL, `Status`

varchar(100) DEFAULT NULL, PRIMARY KEY(`Id`)) ENGINE = InnoDB DEFAULT CHARSET =

latin1;

--Dumping data

for table `task`

Page 5: MySQL و Node.js زا ه{افتسا اب Web API {اجیا : هلاقم ناونع ... · تفریذپ دهاوخ ارget, post , put , delete یاه تساوخر{ ام . api {رک

MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :

وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه

www.barnamenevisan.org [email protected]

--

INSERT INTO `task` (`Id`, `Title`, `Status`) VALUES('1', 'Go to Market tomorrow', 'done'), ('2',

'Email to manager', 'pending'), ('3', 'Push code to GitHub', 'done'), ('4', 'Go For Running',

'done'), ('5', 'Go to Movie', 'pending');

[/code]

: Node.Js با استفاده از API ایجاد

یک فایل برای ایجاد ارتباط با پایگاه داده حال که ، تنظیمات محیطی و پایگاه داده خود را انجام داده ایم ، ما نیاز به

اطالعات الزم میرویم که در داخل این فایل ، dbconnection.js ایجاد یک فایل با نام داریم . بنابراین ، به سراغ

ای که در کد باال ایجاد کردیم local database به وشت . در مثال زیر ، مابرای اتصال به پایگاه داده را خواهیم ن

داده می توانیم به پایگاه hosting Name و Password و Username دادن اطالعات متصل شدیم . شما با تغییر

. خود متصل شوید

: dbconnection.jd ایجاد

[code language = "javascript"]

var mysql = require('mysql');

var connection = mysql.createPool({

host: 'localhost',

user: 'root',

password: '',

database: 'demo'

});

module.exports = connection;

[/code]

: Task Model ایجاد

: را ایجاد کنید ، همانند زیر Task.js فایل Model در داخل فولدر

Page 6: MySQL و Node.js زا ه{افتسا اب Web API {اجیا : هلاقم ناونع ... · تفریذپ دهاوخ ارget, post , put , delete یاه تساوخر{ ام . api {رک

MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :

وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه

www.barnamenevisan.org [email protected]

ولدر با نامایجاد میکنیم . یک ف Task را برای Model زمانی که تنظیمات مربوط به اتصال به پایان رسید ، حال ما

models یک فایلایجاد کنید و درداخل این فولدر، Task.js ایجاد کنید.Task model متد خواهد 5ما شامل

deleteTask و ,getAllTasks, getTaskById, addTask, updateTask.بود

. ای برویم که بیشتر آن را ایجاد کردیمdbconnection module ابتدا باید به سراغ

Task.js :

[code language = "javascript"]

var db = require('../dbconnection'); //reference of dbconnection.js

var Task = {

getAllTasks: function(callback) {

return db.query("Select * from task", callback);

},

getTaskById: function(id, callback) {

return db.query("select * from task where Id=?", [id], callback);

Page 7: MySQL و Node.js زا ه{افتسا اب Web API {اجیا : هلاقم ناونع ... · تفریذپ دهاوخ ارget, post , put , delete یاه تساوخر{ ام . api {رک

MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :

وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه

www.barnamenevisan.org [email protected]

},

addTask: function(Task, callback) {

return db.query("Insert into task values(?,?,?)", [Task.Id, Task.Title, Task.Status],

callback);

},

deleteTask: function(id, callback) {

return db.query("delete from task where Id=?", [id], callback);

},

updateTask: function(id, Task, callback) {

return db.query("update task set Title=?,Status=? where Id=?", [Task.Title, Task.Status,

id], callback);

}

};

module.exports = Task;

[/code]

: Route تنظیمات

ما قادر به Route تنظیم کردن بدون را ایجاد کردیم اما Task و dbconnection های مدل با این وجود که ما

GET میباشد که میتواند HTTP یک متد Route هر نیستیم . انجام هیچ کاری با این چیزی که ایجاد کرده ایم

, POST , PUT یا DELETE باشد .

[code language = "javascript"]

router.get('/:id?', function(req, res, next) {

if (req.params.id) {

Task.getTaskById(req.params.id, function(err, rows) {

if (err) {

res.json(err);

Page 8: MySQL و Node.js زا ه{افتسا اب Web API {اجیا : هلاقم ناونع ... · تفریذپ دهاوخ ارget, post , put , delete یاه تساوخر{ ام . api {رک

MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :

وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه

www.barnamenevisan.org [email protected]

} else {

res.json(rows);

}

});

} else {

Task.getAllTasks(function(err, rows) {

if (err) {

res.json(err);

} else {

res.json(rows);

}

});

}

});

[/code]

کردیم ، که زمانی که را ایجاد router.get بررسی کنیم چه کاری انجام داده ایم ، ما فقط متد حال اجازه دهید که

میتواند با پارامتر یا route.get فراخوانی متد . را ارسال کند اجرا خواهد شد HTTP GET کاربر درخواست

فیلد را به به عنوان پسوند ، آن "؟"اضافه کردن تنها یک اختیاری میباشد . ما با id بدون پارامتر باشد . پارامتر

اوکی است یا نه . اگر اوکی بود ، سپس ما id تعریف میکنیم . پس ، ابتدا بررسی میکنیم که Optional عنوان

Task.getTaskById قبل در را که در مرحله Task.js ایجادش کردیم را فراخوانی میکنیم .

[code language = "javascript"]

router.post('/', function(req, res, next) {

Task.addTask(req.body, function(err, count) {

if (err) {

res.json(err);

} else {

Page 9: MySQL و Node.js زا ه{افتسا اب Web API {اجیا : هلاقم ناونع ... · تفریذپ دهاوخ ارget, post , put , delete یاه تساوخر{ ام . api {رک

MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :

وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه

www.barnamenevisan.org [email protected]

res.json(req.body); //or return count for 1 & 0

}

});

});

[/code]

Task.AddTask خواهد شد . این متد ارسال کند این اجرا HTTP POST زمانی که کاربر درخواستی را برای متد

ارسال خواهد کرد . در صورت موفق بودن req.body عنوان پارامتر را فراخوانی خواهد کرد و داده ها را به

insertation یک task object را باز میگرداند و در صورتی که insertation نباشد ، پیام خطایی با موفقیت همراه

. را باز میگرداند

: Task.js مروری بر

. ایجاد کردیم را ، شامل شود model که بیش تر آن را در فولدر task.js ، باید routing فایل

[code language = "javascript"]

var express = require('express');

var router = express.Router();

var Task = require('../models/Task');

router.get('/:id?', function(req, res, next) {

if (req.params.id) {

Task.getTaskById(req.params.id, function(err, rows) {

if (err) {

res.json(err);

} else {

res.json(rows);

}

});

Page 10: MySQL و Node.js زا ه{افتسا اب Web API {اجیا : هلاقم ناونع ... · تفریذپ دهاوخ ارget, post , put , delete یاه تساوخر{ ام . api {رک

MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :

وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه

www.barnamenevisan.org [email protected]

} else {

Task.getAllTasks(function(err, rows) {

if (err) {

res.json(err);

} else {

res.json(rows);

}

});

}

});

router.post('/', function(req, res, next) {

Task.addTask(req.body, function(err, count) {

if (err) {

res.json(err);

} else {

res.json(req.body); //or return count for 1 & 0

}

});

});

router.delete('/:id', function(req, res, next) {

Task.deleteTask(req.params.id, function(err, count) {

if (err) {

res.json(err);

} else {

res.json(count);

}

Page 11: MySQL و Node.js زا ه{افتسا اب Web API {اجیا : هلاقم ناونع ... · تفریذپ دهاوخ ارget, post , put , delete یاه تساوخر{ ام . api {رک

MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :

وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه

www.barnamenevisan.org [email protected]

});

});

router.put('/:id', function(req, res, next) {

Task.updateTask(req.params.id, req.body, function(err, rows) {

if (err) {

res.json(err);

} else {

res.json(rows);

}

});

});

module.exports = router;

[/code]

: app.js تنظیمات مربوط

درخواست میدهد ، ابتدا این درخواست میباشد . زمانی که کاربر هر متدی node.js این قسمت نقطه ی عطف برنامه

هدایت خواهد شد . بنابراین ، میتوان گفت که این route به app.js هدایت میشود و سپس از App.js به

Configuration file است .

: تنظیم کنیم که آنها را در زیر مشاهده میکنید app.js ما باید یکسری چیز ها را در

• var cors=require('cors');

• var Tasks=require('./routes/Tasks');

• app.use(cors());

• app.use('/Tasks',Tasks);

.شد خواهد زیر همانند َ ما app.js ، فایل App.js بعد از اضافه کردن این دستورات به

Page 12: MySQL و Node.js زا ه{افتسا اب Web API {اجیا : هلاقم ناونع ... · تفریذپ دهاوخ ارget, post , put , delete یاه تساوخر{ ام . api {رک

MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :

وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه

www.barnamenevisan.org [email protected]

[code language = ”javascript”]

var express = require('express');

var path = require('path');

var favicon = require('serve-favicon');

var logger = require('morgan');

var cookieParser = require('cookie-parser');

var bodyParser = require('body-parser');

var cors = require('cors');

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

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

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

var app = express();

// view engine setup

app.set('views', path.join(__dirname, 'views'));

app.set('view engine', 'jade');

// uncomment after placing your favicon in /public

//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));

app.use(cors());

app.use(logger('dev'));

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({

extended: false

}));

app.use(cookieParser());

app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);

Page 13: MySQL و Node.js زا ه{افتسا اب Web API {اجیا : هلاقم ناونع ... · تفریذپ دهاوخ ارget, post , put , delete یاه تساوخر{ ام . api {رک

MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :

وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه

www.barnamenevisan.org [email protected]

app.use('/users', users);

app.use('/Tasks', Tasks);

// catch 404 and forward to error handler

app.use(function(req, res, next) {

var err = new Error('Not Found');

err.status = 404;

next(err);

});

// error handlers

// development error handler

// will print stacktrace

if (app.get('env') === 'development') {

app.use(function(err, req, res, next) {

res.status(err.status || 500);

res.render('error', {

message: err.message,

error: err

});

});

}

// production error handler

// no stacktraces leaked to user

app.use(function(err, req, res, next) {

res.status(err.status || 500);

res.render('error', {

message: err.message,

Page 14: MySQL و Node.js زا ه{افتسا اب Web API {اجیا : هلاقم ناونع ... · تفریذپ دهاوخ ارget, post , put , delete یاه تساوخر{ ام . api {رک

MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :

وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه

www.barnamenevisan.org [email protected]

error: {}

});

});

module.exports = app;

[/code]

: خود میرویم RESTful API کار ما به اتمام رسیده است ، حال به سراغ اجرای

npm start :

: هایی ست که ما استفاده خواهیم کرد و متدهایی که فراخوانی خواهیم کردRoute جدول زیر خالصه ای از

Page 15: MySQL و Node.js زا ه{افتسا اب Web API {اجیا : هلاقم ناونع ... · تفریذپ دهاوخ ارget, post , put , delete یاه تساوخر{ ام . api {رک

MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :

وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه

www.barnamenevisan.org [email protected]

موجود است استفاده میکنیم Mozilla FireFox که در مرورگر REST Client ما از ابزار API برای تست کردن

.

http://localhost:3000/Tasks

http://localhost:3000/Tasks/1