วันพุธที่ 21 ตุลาคม พ.ศ. 2563

NodeJs express เรียก static html page

 แก้ปัญหา HTML page แบบโบราณ บน Node server


app.use(['/wildcard*', '/wildcard'], (req, res) => {
let dynamicPath = req.baseUrl.replace('/wildcard', '');
fs.stat('<absolute path>' + dynamicPath, (err, stats)=>{
if(err!==null){
res.status(200).send('No file or directory with path : ' + dynamicPath);
}else if(stats.isFile()){
res.sendFile('<absolute path>' + dynamicPath);
}else if(stats.isDirectory()){
dynamicPath = dynamicPath === '' ? '/' : dynamicPath;
res.status(200).send('Found directory with path : ' + dynamicPath);
}
})

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

NodeJS ส่ง Print Text จริงๆ

 แสดง. Text มี 2 แบบ เป็น HTML และ Text ต้องบอก res.type('txt').  ถ้าไม่นั้นต้อง .replace('\n', <br/>)

app.get('/textfile', (req, res) => {
// var text = 'Hello world!\nabcde'
//res.attachment('filename.txt')
var fs = require("fs");
var text = fs.readFileSync('./test.txt').toString();
res.type('txt')
res.send(text)
})

การให้ 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))

วันศุกร์ที่ 16 ตุลาคม พ.ศ. 2563

การ Run node background ใน FreeBSD

 จะ run Node ต้องเช็ค Port ก่อน ใช้ socks tat

socks tat -4 -l

ดูว่ามี Process ใหน Lock port แล้ว 

kill -9 <pid>

ถ้าไม่ได้ ต้อง sudo kill -9 <pid>

สำหรับ run ให้ ใช้

nohub npm run start &

ตรวจว่า มี error ที่ nohub.out

ถ้า ไม่ได้ ต้องใช้ sudo nohub npm run start &