วันอังคารที่ 20 ตุลาคม พ.ศ. 2563

การให้ NodeJs เรียก PHP

 PHP เป็นระบบ Application Run เป็น Interpreter และ NodeJs ก็คล้ายกัน แต่ NodeJs เป็นทั้ง Server และ Client  App ทั้ง 2 แบบมี จำนวนมาก เพื่อให้ run ใน Port 80 เหมือนกัน ต้องให้เป็น Host 1 ตัว

เลือก NodeJs เป็น Host

1.ติดตั้ง nodejs และ php ให้เรียบร้อย

2.ใน Node directory 

     npm install express

     npm install exec-php


3. code ของ PHP

    เช่น

    <?php

echo "One";
function my_function($arg1, $arg2){
echo "Two";
return $arg1 + $arg2;
}

และ Code ของ Node
server.js
const express = require('express')
const app = express()
const PORT = process.env.PORT || 8080
const { doPHP, phpMiddleware } = require('./app.js')

app.get('/mid', phpMiddleware, (req, res) => res.send(req.result + ""))

app.listen(PORT, () => {
console.log(`Server is running on port : ${PORT}`)
})
module.exports = app


สำหรับ app.js

function phpMiddleware(req, res, next){
execPhp('file.php', function (error, php, outprint) {

// outprint is now `One'.

php.my_function(1, 2, function (err, result, output, printed) {
// result is now `3'
console.log(result)
req.result = [result, output, printed].join(" ");
// res.send(result+"")
// res.sendStatus(400)
next();
// output is now `One'.
// printed is now `Two'.
});
});
}

module.exports = {doPHP, phpMiddleware}


การใข้ Middleware จะทำให้สะดวกขึ้น ไม่ต้องส่ง ต้ว app.get(.. res) res ไปให้ Function ที่ execPHP เพราะ execPHP จะ run เป็น Asyn ไม่ได้รอกัน ต้องส่ง res ไปให้ update callback(cb)ค่ากลับมา ตัวอย่าง
const execPhp = require('exec-php');
function doPHP(cb) {
var out1 = 'x';
execPhp('file.php', function (error, php, outprint) {

// outprint is now `One'.

php.my_function(1, 2, function (err, result, output, printed) {
// result is now `3'
console.log(result)
out1 = result;
cb.status(200).send(result.toString())
// output is now `One'.
// printed is now `Two'.
});
});
}
ต้นทาง
app.get('/php', (req, res) => doPHP(res))

ไม่มีความคิดเห็น:

แสดงความคิดเห็น