今天小编就为你们分享一篇关于零基础之Node.js搭建API服务器的详解,写的十分的全面细致,具备必定的参考价值,对此有须要的朋友能够参考学习下。若有不足之处,欢迎批评指正。前端
零基础之Node.js搭建API服务器node
这篇文章写给那些Node.js零基础,但但愿本身动手实现服务器API的前端开发者,尝试帮你们打开一扇门。shell
HTTP服务器实现原理编程
HTTP服务器之因此能提供前端使用的API,其实现原理是服务器保持监听计算机的某个端口(一般是80),等待客户端请求,当请求到达并通过一系列处理后,服务器发送响应数据给到前端。 平时你们经过Ajax调用API,便是发起一次请求,通过服务器处理后,获得结果,而后再进行前端处理。现在使用高级编程语言,要实现服务器那部分功能已经变得很是简单,接下来咱们了解一下使用Node.js如何实现。json
什么是Node.js?它能够作什么?windows
Node.js是一个JavaScript的运行时(runtime),它提供了大量用JS与操做系统打交道的API,经过这些API,咱们能够调用本地程序、读写磁盘、监听端口、发起网络请求等,这足以开发出一个功能完善的Server。后端
前期准备api
简单介绍完Node.js,开始写代码以前,咱们须要安装Node.js,安装详细过程就不说明了,请你们Google或者百度。不一样系统安装过程不同,若是是Linux、Mac,会相对顺利且遇到问题的可能性较低。 判断安装成功与否,windows下,在cmd中执行node -v,Linux、Mac下,在shell中执行node -v,正常输出版本号说明安装成功。浏览器
tips: windows若是提示命令未找到,多是未配置环境变量服务器
实现简单的Server
Node.js安装成功,咱们找个地方新建目录my-server做为咱们的存放代码的地方,接下来全部的代码都在该目录下。首先,在my-server的目录下新建文件index.js,用以下代码实现一个简单的Server:
// index.js // 经过require获取两个node内置模块 const http = require('http'); const nUrl = require('url'); // '127.0.0.1'代表只有本机可访问,'0.0.0.0'表示全部人可访问 const hostname = '127.0.0.1'; const port = 3000; // 经过http.createServer获取一个server实例 // 其中(req, res) => {},在服务器每次接收到请求时都会被执行 const server = http.createServer((req, res) => { let method = req.method; // 客户端请求方法 let url = nUrl.parse(req.url); // 将请求url字符串转换为node的url对象 // 若是客户端GET请求'/',会执行这个分支里面的逻辑 if (method === 'GET' && url.pathname === '/') { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World'); return; } // 若是客户端GET请求'/api/user',会执行这个分支里面的逻辑 if (method === 'GET' && url.pathname === '/api/user') { res.statusCode = 200; res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify({ code: 0, msg: '', result: { username: 'shasharoman' } })); return; } // 没有匹配其余分支的话,执行如下逻辑 res.statusCode = 404; res.setHeader('Content-Type', 'text/plain'); res.end('Not Found'); }); //在此我向你们推荐一个前端全栈开发交流圈:619586920 突破技术瓶颈,提高思惟能力 // server开始监听,等待请求到来 server.listen(port, hostname, () => { console.log(`Server running at <a href="http://${hostname}:${port}/`);"
文件内容编辑保存后,在my-server目录下经过命令node index.js启动服务,而后在浏览器中访问http://127.0.0.1:300/、http://127.0.0.1:300/api/user、http://127.0.0.1:300/xxx观察不一样结果。
这是官方Guides通过小小修改获得的代码,添加部分注释以及额外逻辑。主要为了更清晰传达如下几个知识点:
往前优化一步
经过上面的代码,实现了一个简单Server,但真实场景下咱们会这样去实现吗?答案是确定不会,因此咱们还须要一步步完善,作如下几个修改:
代码很少,一共五个文件:
// config.js exports = module.exports = { hostname: '127.0.0.1', port: '3000' };
// route.js exports = module.exports = [{ method: 'GET', path: '/api/user', impl: 'account.userById' }, { method: 'POST', path: '/api/user', impl: 'account.createUser' }]; //在此我向你们推荐一个前端全栈开发交流圈:619586920 突破技术瓶颈,提高思惟能力
// route.js exports = module.exports = [{ method: 'GET', path: '/api/user', impl: 'account.userById' }, { method: 'POST', path: '/api/user', impl: 'account.createUser' }];
// controller/index.js exports.account = require('./account');
// index.js const http = require('http'); const nUrl = require('url'); const config = require('./config'); const controller = require('./controller'); const route = require('./route').map(item => { console.log(`route ${item.method}:${item.path}`); let tuple = item.impl.split('.'); item.impl = controller[tuple[0]][tuple[1]]; return item; }); const server = http.createServer((req, res) => { let method = req.method; let url = nUrl.parse(req.url); let matchRoute = route.find(item => { return item.method === method && item.path === url.pathname; }); if (matchRoute) { matchRoute.impl(req, res); return; } res.statusCode = 404; res.setHeader('Content-Type', 'text/plain'); res.end('Not Found'); }); server.listen(config.port, config.hostname, () => { console.log(`Server running at <a href="http://${config.hostname}:${config.port}/`);" rel="external nofollow">http://${config.hostname}:${config.port}/`); </a>}); //在此我向你们推荐一个前端全栈开发交流圈:619586920 突破技术瓶颈,提高思惟能力
依旧是用node index.js启动Server,若是要在现有模式下开发一个API,主要就两步: 在route.js中定义路由
在controller/中实现
作这个程度的优化,只是为了向你们传达一些比较宽泛的概念,还不是真正用来写API服务,只是为了大伙练练手。 这个程度还达不到真实场景需求,还须要通过几轮改造,包括模块、层、common、lib、query解析,body解析、更灵活的route等一系列事情,限于篇幅,有机会在一一讲述。 通过个人描述以及代码示例,若是你们有兴趣学习Node.js,建议多搜搜相关知识,保持关注,而后在逐步去熟悉Node.js流行的Web框架如:Express、Koa等,不过框架只是更高层面的封装,基础的概念以及知识仍是须要花时间才能掌握。 若是前端想尝试后端编程,请必定先学习HTTP协议,推荐《HTTP权威指南》从头至尾认真看一遍。
结语
感谢您的观看,若有不足之处,欢迎批评指正。