I also recommended Rust (been using just over a year, I've loved it so far, compiled code feels so much more powerful than janky and fragile dynamicaly-typed languages), Go or Elixir+Phoenix (anything to get away from Node.js, but they are all quite different), but my supervisors aren't too keen on a new language.
I'm not after performance, but a clean and maintainable architecture. I've heard good things about Django and Ruby on Rails, although I'm not particular keen on either. PHP would likely not be suitable, it has to do some background processing work. I feel like I could make any language work, it's just Node.js' dependency problem that gives me nightmares.
I would value some feedback or advice, I'm doing my head in with decisions.
- I heard a lot of npm dependencies nightmare, but somehow, we do not hit that much. Once in a while (a couple of months at most), we get some weird errors, delete node_modules, and are back at it. IMO, TypeScript is a must for any code > 10K LOC (and I use it even with 100 LOC).
- NodeJS/TS's benefit is that it is the same language for the backend and frontend, allowing students to focus on the patterns rather than learning another language.
- However, I love Rust, and I think it is an excellent fit for cloud/web backend. We are moving our NodeJS/TS backend services (web service & job service) to Rust, at least for new ones. Still working on the blueprint, it is quite an effort, and the big question is how long it takes for a whole team to learn Rust well.
- If the university understands the pros/cons of Rust and want to "invest" in it, it might be a good idea to have a Rust backend. However, if they have no clue what it is, it might be too early for them.
- IMO, Rust will become more mainstream in the years to come, especially for backend services. It might take 5 to 10 years, but I hope and think it will get there.
Those are not recommendations, just thoughts, as this is a very contextual decision.
Best of luck, I am sure you will do well, you seem to have all of the right questions.
I think in order for students to learn they should be using lower level packages directly. So something like Express or Koa + the SQL driver directly. Learning the core concepts underneath is more valuable to students than learning a specific ORM or framework that abstracts all the details away.
Learning how to deal with dependencies is a similar thing. I don't think any course would be complete if it teaches Node without also teaching how to build a Dockerfile to package up your application and the snapshot of it's NPM dependencies as a container image.
Building a compiled binary with Rust or Go is one language specific way to solve the problem of packaging dependencies, but you have an opportunity to also teach students a general purpose tool like Docker container images, which can be used to solve lots of different dependency packaging and distribution problems, not just for NPM, but also your static files, your specific runtime binary versions, any system packages you might need, etc.
Your head is in the right place. Use whatever you think is going to be the most maintainable by your successor. Only you can make the right decision. Every ecosystem has warts, there are no silver bullets.