Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

native_counter

rust neon project for nodejs ffi call.

如何操作

  1. 安装好nodejs,查看nodejs版本
node -v
v16.15.0
  1. 安装好neon-cli
npm install neon-cli -g
  1. 创建native_counter项目
cd ~
neon new native_counter

查看生成的目录

cd native_counter
tree -L 2 ./
./
├── LICENSE
├── README.md
├── lib
│ └── index.js
├── native
│ ├── Cargo.lock
│ ├── Cargo.toml
│ ├── artifacts.json
│ ├── build.rs
│ ├── index.node
│ ├── src
└── package.json
  1. 编写rust代码,在native/src/lib.rs添加如下代码:
use neon::prelude::*;

fn hello(mut cx: FunctionContext) -> JsResult<JsString> {
    Ok(cx.string("hello node"))
}

fn count_words(mut cx: FunctionContext) ->JsResult<JsNumber>{
    let txt = cx.argument::<JsString>(0)?.value();
    let word = cx.argument::<JsString>(1)?.value();

    // 按照空格进行分割,得到的是一个字符串数组,然后调用filter进行回调处理
    // 统计word出现的次数,强制转换为f64格式,因为js number都是float64类型
    Ok(cx.number(txt.split(" ").filter(|s|{
        s == &word
    }).count() as f64))
}

// 通过宏的方式将函数导出
register_module!(mut cx, {
    cx.export_function("hello", hello)?;
    cx.export_function("count_words", count_words)?;
    Ok(())
});
  1. 通过neon编译rust生成nodejs 二进制文件index.node
cd ~/native_counter
neon build

这个命令会在native目录下生成index.node

备注:

  • nodejs require支持.js,.json,.node结尾的文件加载
  • 上线这个rust nodejs拓展,只需要将index.node文件放到native下就可以
  1. 在lib/index.js中编写如下代码:
const addon = require('../native');

// console.log(addon.hello());

module.exports = {
    hello: addon.hello,
    count_words: addon.count_words
}
  1. 在native_counter下面编写main.js进行测试
const addon = require(".");
let wc = addon.count_words("a test to rust ffi for nodejs test this is test project","test");
console.log("test count:",wc);

// 调用hello函数
console.log(addon.hello());
  1. 执行node main.js
node main.js
test count: 3
hello node

恭喜你,到这里rust ffi for nodejs call成功运行了!

neon crate

其他rust ffi for nodejs crate

About

rust neon project for nodejs ffi call.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages