当前位置: 首页 > 后端技术 > Node.js

搭建节点简单服务

时间:2023-04-04 00:34:27 Node.js

安装node1,从Node官网下载pkg安装包,点击安装,安装包包括nodejs和npm(node包管理器)2、安装完成后,输入curlhttp://npmjs.org/install.sh|命令终端中的sh3,这个npm.js其实是一个Node.js的套件管理工具。执行完成后,我们继续执行更新npm的命令:sudonpmupdatenpm-g4,检查npm是否安装成功npm-vcreatenodeservice创建节点服务和web端通信需要使用http,https如果你需要使用fs访问文件,先创建服务1,新建文件server.js2,引入相应的依赖varhttp=require('http');varhttps=require('https')varfs=require('fs');3.创建http服务constserver=http.createServer((req,res)=>{//这里可以设置header信息,比如跨域信息}).listen(8090)4.启动服务以上内容可以启动服务。可以通过node的命令来启动服务。默认域名为http://127.0.0.1:8090访问节点服务。您可以为创建的服务添加一些监控。服务监听request请求监听有两个参数,reqrequest和resresponse添加监听方法,比如文件请求,方法接口请求constrequestHandle=(req,res)=>{//设置一些请求处理方法if(url==='/index'){//文件请求res.writeHead(200,{'Content-Type':'text/html'})fs.readFile('index.html','utf8',function(err,data){if(err)throwerrres.end(data)})}elseif(url==='/api'){//接口请求req.on('data',function(pamas){console.log('8888888')//在这里做一些数据处理})req.on('end',()=>{//请求结束})}else{//404请求res.write('404')res.end()}}添加监听server.on('request',requestHandle)console.log中的内容服务终端会显示节点服务请求其他服务。以钉钉报警为例。由于前端不支持直接请求钉钉告警接口,需要通过服务转发请求。下面的例子是constdingdingHandle=(str,callback)=>{//钉钉告警参数constpostData={msgtype:"text",text:{content:str},"at":{"atMobiles":["155********"],"isAtAll":false}};constoptions={hostname:'oapi.dingtalk.com',path:'/robot/send?access_token=d529ae67dcc82157032c3c84bad0c450a2329692adca0e00000efcbddf2898',方法:类型:ad'POST-Type:ad''application/json;charset=UTF-8',}};constreq=https.request(options,(res)=>{console.log(`statuscode:${res.statusCode}`);console.log(`Responseheader:${JSON.stringify(res.headers)}`);res.setEncoding('utf8');res.on('data',(chunk)=>{console.log(`Responsebody:${chunk}`);callback(chunk)});res.on('end',()=>{console.log('响应中没有数据。');});});req.on('error',(e)=>{console.error(`请求遇到问题:${e.message}`);});//向请求体写入数据req.write(JSON.stringify(postData));要求。end();}当接收到相应的请求时调用此方法。在服务端请求监听的回调中对应接口调用...}elseif(url==='/api'){//接口请求req.on('data',function(params){console.log('8888888')//请求钉钉报警接口,并将响应返回的参数推送到前台页面的请求dingdingHandle(params.toString,(data)=>{res.end(data)})})req.on('end',()=>{//请求结束})}else{//404request...前端页面接口请求前端页面请求,业务场景为监听towindow.onerror=function(msg,url,line,column,error){让数据={msg:msg,url:url,line:line,col:column}console.log(data,'---------------');让xhr=newXMLHttpRequest()//xhr.withCredentials=truexhr.open('POST','http://127.0.0.1:8090/api',true)xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");xhr.send(JSON.stringify(data))xhr.onreadystatechange=function(){xhr.readyState===4&&xhr.status===200&&console.log('ok',xhr.responseText)}}交叉-domain当前前端页面的服务为http://127.0.0.1:8080/,与node服务跨域。这时候需要在创建服务的时候加上header,设置constserver=http。createServer(function(req,res){res.setHeader('Access-Control-Allow-Origin','*')res.setHeader('Access-Control-Allow-Oring','http://127.0.0.1:8080/')res.setHeader('Access-Control-Allow-Credentials',true)}).listen(8090);注意:如果是vue项目中的axios,需要手动设置header和importaxios对传过来的数据进行强转换from'axios'importqsfrom'qs'axios({method:'post',url:'http://127.0.0.1:8090/api',data:errorData,withCredentials:false,headers:{'Content-Type':'application/x-www-form-urlencoded'},transformRequest:[sdata=>{//强制转换数据格式console.log(sdata,qs.stringify(sdata))returnqs.stringify(sdata)}]}).then(res=>{console.log('res=>',res)})