一、环境搭建:安装 Node.js + Cnpm + Express + Body-parser
【Node.js 】是运行在服务端的 JavaScript,它基于Google的V8引擎的
安装Node:官网 https://nodejs.org/zh-cn/
npm(node package manager):nodejs自带的包管理器,用于node插件管理(包括安装、卸载、管理依赖等)
【Cnpm】:是一个完整 npmjs.org 镜像,由于服务器在国内,所以速度会快很多
安装Cpnm:官网 https://npm.taobao.org/
【Express】 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。使用 Express 可以快速地搭建一个完整功能的网站。
安装Express:官网 http://www.expressjs.com.cn/
【body-parser】是一个HTTP请求体解析中间件,它只处理 POST 请求,可以解析JSON、Raw、文本、URL-encoded格式的请求体,然后转成键值对的对象赋值给req.body
安装body-parser:http://github.com/expressjs/body-parser
cnpm install body-parser
参考链接1:https://www.jianshu.com/p/ea0122ad1ac0
参考链接2:https://segmentfault.com/a/1190000016707134
二、JS文件
1、sum.js
// 示例函数:加法函数
// 未来放抠出来的加密js函数
function add(a,b){
return a+b;
}
// 通过module.exports对外公开的方法才可以访问
module.exports = {
add
}
2、main.js(跟sum.js放在同一个文件夹下)
// main.js
// require(id):Used to import modules, JSON, and local files
// 参考:http://nodejs.cn/api/modules/require_id.html
// 引入依赖包
var express = require('express')
var bodyParser = require('body-parser')
// 引入自定义的JS文件
// 路径:/表示根目录 ./表示当前目录 ../表示父级目录
var sum = require("./sum")
// 创建应用实例
var app = express()
// 使用 body-parser 中间件
// urlencoded和json,分别处理表单提交和json格式的请求体,只支持utf-8编码
// 当Content-Type 为 x-www-form-urlencoded 的时候,POST 的请求数据是表单
// Content-Type 为 application/json 的时候,HTTP POST请求数据是JSON的
/* 当urlencoded中extended为false时,会使用querystring库解析URL编码的数据,键值对中的值就为'String'或'Array'类型
当urlencoded中extended为true时,会使用qs库解析URL编码的数据,键值对中的值是任意类型
默认是True */
// 参考链接:表单提交和json提交 https://blog.csdn.net/qq_15037231/article/details/80403581
// for parsing application/x-www-form-urlencoded
// 判断请求体格式是不是表单格式,如果是的话会调用qs库把请求体字符串转成对象
app.use(bodyParser.urlencoded({ extended: true }));
// for parsing application/json
// 判断请求体格式是不是json格式,如果是的话会调用JSON.parse方法把请求体字符串转成对象
app.use(bodyParser.json());
// 上面两个只会有一个生效
// 创建路由
// app.post(path, callback [, callback ...])
// app.post("url",function(req, res) {具体逻辑})
// http://www.expressjs.com.cn/4x/api.html#app.post.method
app.post('/get_num', function (req, res) {
// req.body:Contains key-value pairs of data submitted in the request body
// 获取请求路径中传递的查询参数
let result = req.body
console.log("result",result) // 在控制台输出
let a = parseInt(result.a) // 将客户端传过来的属性a强制转换成整数类型
let b = parseInt(result.b) // 将客户端传过来的属性b强制转换成整数类型
result = sum.add(a,b)
res.send(result.toString()); // 将结果返回,只支持字符串类型或者json格式
})
// app.listen([port[, host[, backlog]]][, callback])
// 启动服务,监听指定主机和端口上的连接
app.listen(3000,() =>{
console.log("开启服务,端口3000")
})
3、启动服务
(1)启动CMD命令窗口
(2)cd 进文件存放目录
(3)运行主文件,启动服务 node main.js
三、Python 调用
import requests
url = "http://localhost:3000/get_num"
data = {"a":1,"b":2}
req = requests.post(url,data)
print(req.text)
# 输出 3
四、其它
// window,document,screen等浏览器相关的对象,在js中有,但在nodejs中缺少
// 解决方法之一是:声明一个相应的全局变量
var window = {}
// window.bort = funtion(aaa){return aaa}
var document = {}
document = {"location":{"href":"www.baidu.com"}}
var screen = {}
screen = {"width" = 900, "height" = 1600}
// 解决方法之二,是利用jsdom、jest等库
// https://github.com/jsdom/jsdom
// https://jestjs.io/zh-Hans/
// window.bort用于创建一个 base-64 编码的字符串。
// base-64 解码使用方法是 atob()
// nodejs中base-64 编码
Buffer.from('Hello').toString('base64') // 输出SGVsbG8=
// nodejs中base-64 解码
Buffer.from('SGVsbG8=', 'base64').toString('ascii') // 输出hello
// 可参考 https://www.jianshu.com/p/fa46e67eab74
end