Hi Rongzhong Li, first, congrats for the project, im a big fan from the begining.
Here, some examples to manage Servos: http://johnny-five.io/examples/#servo
Options 1 & 2 are great to send commands to Nybble by a webpage, for example.
As i supposed, the option 4 requires to re-code all your work.
But i think, the option 3 would be a good option.
Thanks for the answer!
did you try to implement option 3?
For option 1 & 2 you can check out my Web API, maybe it's enough for your requirements:
Multiple connections are possible:
1. JS on Pi send string token through serial to NyBoard for parsing
2. JS on remote computer (could still be the Pi) send string token through bluetooth to NyBoard for parsing
3. JS on Pi send angles through I2C to PCA9685 on NyBoard
4. Run JS directly on NyBoard as regular Arduino (it seems possible in your linked examples). But that will involve translating the whole code.
So yes, as long as JS has those hardware communication libraries.