博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
搭建node 简易服务
阅读量:2241 次
发布时间:2019-05-09

本文共 4115 字,大约阅读时间需要 13 分钟。

node 简易服务

安装node

1、下载pkg安装包,点击安装即可,安装包包含nodejs和npm(node package manager)

2、安装完成后,在命令终端输入

curl http://npmjs.org/install.sh | sh

3、这个npm.js实际上是Node.js的套件管理工具,执行完成之后我们继续执行命令,更新npm:

sudo npm update npm -g

4、查看npm是否安装成功

npm -v

创建node 服务

创建node 服务和web 端通信需要用到http、https

如果访问文件需要用到fs

首先创建一个服务

1、新建一个文件server.js

2、引入对应所需的依赖

var http=require('http');var https = require('https')var fs = require('fs');

3、创建http 服务

const server = http.createServer((req, res) => {
// 这里可以设置header信息, 如跨域等信息}).listen(8090)

4、启动服务

以上内容即可启动服务,可以通过node 的命令启动服务,默认域名是http://127.0.0.1:8090

即可访问node 服务,可以对创建的服务添加一些监听

对创建的服务监听request请求

request 监听有两个参数,req 请求 和 res 响应

添加监听的方法, 如文件的请求,方法接口的请求

const requestHandle = (req, res) => {
// 设置一些 请求处理的方法 if (url === '/index') {
// 文件的请求 res.writeHead(200, {
'Content-Type': 'text/html' }) fs.readFile('index.html', 'utf8', function (err, data) {
if (err) throw err res.end(data) }) } else if (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 的内容均在服务终端上会展示出来

node服务请求其他服务

以钉钉报警为例,由于前端不支持直接请求钉钉报警接口,需要通过服务来转发请求,便有了如下例子

const dingdingHandle = (str, callback) => {
// 钉钉报警传参 const postData = {
msgtype: "text", text: {
content: str }, "at": {
"atMobiles": [ "155********" ], "isAtAll": false } }; const options = {
hostname: 'oapi.dingtalk.com', path: '/robot/send?access_token=d529ae67dcc82157032c3c84bad0c450a2329692adca0e00000efcbddf2898', method: 'POST', headers: {
'Content-Type': 'application/json;charset=UTF-8', } }; const req = https.request(options, (res) => {
console.log(`状态码: ${
res.statusCode}`); console.log(`响应头: ${
JSON.stringify(res.headers)}`); res.setEncoding('utf8'); res.on('data', (chunk) => {
console.log(`响应主体: ${
chunk}`); callback(chunk) }); res.on('end', () => {
console.log('响应中已无数据。'); }); }); req.on('error', (e) => {
console.error(`请求遇到问题: ${
e.message}`); }); // 写入数据到请求主体 req.write(JSON.stringify(postData)); req.end();}

这个方法在接收到对应的请求时调用

在服务端request 监听的回调中对应的接口中调用

... } else if (url === '/api') {
// 接口请求 req.on('data', function (params) {
console.log('8888888') // 请求钉钉报警接口,并将响应返回的参数推到前端页面的请求中 dingdingHandle(params.toString, (data) => {
res.end(data) }) }) req.on('end', () => {
// 请求结束 })} else {
// 404 请求...

前端页面接口请求

前端页面请求,业务场景是页面报错时监听

window.onerror = function (msg, url, line, column, error) {
let data = {
msg: msg, url: url, line: line, col: column } console.log(data, '--------------'); let xhr = new XMLHttpRequest() // xhr.withCredentials = true xhr.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) } }

跨域

当前前端页面的服务为http://127.0.0.1:8080/,和node 服务存在跨域,此时需要在创建服务的时候,添加header 设置

const server = 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 以及强转化传输的数据

import axios from 'axios'import qs from '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)) return qs.stringify(sdata) }] }).then(res => {
console.log('res=>', res) })

转载地址:http://okhbb.baihongyu.com/

你可能感兴趣的文章
RNN的高级应用
查看>>
TensorFlow-7-TensorBoard Embedding可视化
查看>>
轻松看懂机器学习十大常用算法
查看>>
一个框架解决几乎所有机器学习问题
查看>>
特征工程怎么做
查看>>
机器学习算法应用中常用技巧-1
查看>>
决策树的python实现
查看>>
了解 Sklearn 的数据集
查看>>
如何选择优化器 optimizer
查看>>
一文了解强化学习
查看>>
CART 分类与回归树
查看>>
seq2seq 的 keras 实现
查看>>
seq2seq 入门
查看>>
什么是 Dropout
查看>>
用 LSTM 做时间序列预测的一个小例子
查看>>
用 LSTM 来做一个分类小问题
查看>>
详解 LSTM
查看>>
按时间轴简述九大卷积神经网络
查看>>
详解循环神经网络(Recurrent Neural Network)
查看>>
为什么要用交叉验证
查看>>