Rust プロセスを、 node/express から起動してDB登録 #Rust #node
■ 概要:
前のRustの関連となり。
node/express から、Rustプロセスを呼出し
jsonファイルから , sqlite3に登録する例となります。
・前の、Rust sqlite3 と同様で、起動時の処理を修正しています。
■ 環境
Rust
rustc 1.46.0
cargo 1.46.0
node 14.11
express
sqlite3
ubuntu 18.04
■ Cargo.toml
[dependencies]
rusqlite = "0.24.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
chrono = "0.4.15"
■ Rust, main.rs
https://gist.github.com/kuc-arc-f/b172fb1f8f043e66773094146cd50bc8
pub fn exec_main(json_fname: String, dbfname: String){
let text = Utc::now().format("%Y-%m-%d %H:%M:%S.%f").to_string();
println!("text_1={}", text);
let dt1: NaiveDateTime = NaiveDateTime::parse_from_str( &text, "%Y-%m-%d %H:%M:%S.%f").unwrap();
// let json_fname = "/home/naka/work/node/express/app7/public/tasks.json";
let json = get_content( json_fname );
// println!("main={}", json);
let deserialized: Vec<TaskItem> = serde_json::from_str(&json).unwrap();
let dbfname_str = String::from(dbfname);
// let dbfname_str = String::from("/home/naka/work/node/express/app7/public/test.db");
exec_sql_array(dbfname_str , deserialized);
let text_2 = Utc::now().format("%Y-%m-%d %H:%M:%S.%f").to_string();
let dt2: NaiveDateTime = NaiveDateTime::parse_from_str( &text_2, "%Y-%m-%d %H:%M:%S.%f" ).unwrap();
let duration: Duration = dt2 - dt1;
println!("text_2={}", text_2 );
println!("secs: {}", duration.num_seconds());
println!("milliseconds: {}", duration.num_milliseconds());
}
//
fn main(){
println!("#-start-main");
let args: Vec<String> = env::args().collect();
let arg1 = &args[1];
let arg2 = &args[2];
println!("{:?}", args);
println!("{}", arg1 );
exec_main( arg1.to_string() , arg2.to_string() );
}
・Rust 起動時に、jsonファイル、dbファイルのパスを受け取ります。
■ express, Rust起動
https://gist.github.com/kuc-arc-f/dd8dfe8b6209dbfb3928907baf9f0aaa
・jsonファイル、dbファイルのパスを渡します
・spawnで、 Rustパスを指定
const { spawn } = require('child_process');
//
router.get('/', function(req, res, next) {
res.send('respond with a resource-1234');
});
//
router.get('/test1', function(req, res, next) {
// console.log("test_proc");
var json_fname = "/hoge/public/tasks.json";
var dbfname = "/hoge/public/test.db";
const child = spawn('./public/sqlite-test', [json_fname , dbfname ]);
child.stdout.on('data', (data) => {
console.log('stdout data:', data.toString('utf8'));
});
child.stderr.on('data', (data) => {
console.error('stderr data:', data.toString('utf8'));
});
child.on('close', (code) => {
console.log("on close:", code);
});
res.send("1");
});
■ テスト、登録確認
curl で、起動する例です。db追加の確認ができました
$ curl http://localhost:3000/wasm_proc/test1
$ sqlite3 public/test.db
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
sqlite> select count(*) from tasks;
2100
sqlite>
■ まとめ
プロセス起動する方法になりますが。
URL指定で、Rust処理を起動でき。
ファイル読み書き、DB登録等が可能になり。便利かと思いました
ここから先は
0字
Rust WebAssembly 開発の事例、ノウハウに関する記事を集めました。第2回 ■ 免責事項 / 注記 , 内容について動作確…
この記事が気に入ったらチップで応援してみませんか?