Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
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
MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :
وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه
www.barnamenevisan.org [email protected]
• Express Template از Node.js را نصب کنید :
1 cmd> express
میکنیم . کد باال یک پروژه ساده استفاده Node.js برای Express Template در اینجا ، در این مثال ، ما از
Node.js را برای ما آماده میکند
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 فایل در واقع با نوشتن دستور باال وابستگی ها را به
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`
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 در داخل فولدر
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);
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);
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 {
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);
}
});
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);
}
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 بعد از اضافه کردن این دستورات به
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);
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,
MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :
وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه
www.barnamenevisan.org [email protected]
error: {}
});
});
module.exports = app;
[/code]
: خود میرویم RESTful API کار ما به اتمام رسیده است ، حال به سراغ اجرای
npm start :
: هایی ست که ما استفاده خواهیم کرد و متدهایی که فراخوانی خواهیم کردRoute جدول زیر خالصه ای از
MySQLو Node.jsبا استفاده از Web APIایجاد عنوان مقاله :
وتنظیم کننده : مرجع تخصصی برنامه نویسان تهیه
www.barnamenevisan.org [email protected]
موجود است استفاده میکنیم Mozilla FireFox که در مرورگر REST Client ما از ابزار API برای تست کردن
.
http://localhost:3000/Tasks
http://localhost:3000/Tasks/1