目录
一、运行js文件
二、引入或开放接口模块
1、提供模块公开接口module.exports
2、引入模块require
三、GET/POST请求
四、创建Web服务器/客户端
1、 Node 创建 Web 服务器
2、 使用 Node 创建 Web 客户端
五、Express 框架
1、安装express
2、express简单案例
3、Python使用nodejs运行js脚本
一、运行js文件
新建hello.js,内容如下 ,终端运行程序 node hello.js
console. log ( "Hello World" ) ;
二、引入或开放接口模块
Node.js 提供了 exports
和 require
两个对象
1、提供模块公开接口module.exports
exports
:是模块公开的接口
module.exports = Hello
决定了外部可以引用该模块,其接口对象就是输出的Hello对象本身
function Hello ( ) {
var name;
this . setName = function ( thyName ) {
name = thyName;
} ;
this . sayHello = function ( ) {
console. log ( 'Hello ' + name) ;
} ;
} ;
module. exports = Hello;
2、引入模块require
require
:用于从外部获取一个模块的接口,比如用来载入 Node.js 模块或者已经exports了的本地的js文件。简单说:require 用来加载一个文件的,可加载 .js、.json 和 .node 后缀的文件
require('./hello')
引入了当前目录下的 hello.js 文件(./ 为当前目录,node.js 默认后缀为 js)
var Hello = require ( './hello' ) ;
hello = new Hello ( ) ;
hello. setName ( 'BYVoid' ) ;
hello. sayHello ( ) ;
三、GET/POST请求
1、获取GET请求内容
运行如下文件node server.js,并在浏览器中输入http://localhost:3000/user?name=Nodejs_learning_website&url=https://www.runoob.com/nodejs/node-js-get-post.html
通过res.write()和res.end()即可了解对应的响应内容
即可看到get请求对应的响应的内容
var http = require ( 'http' ) ;
var url = require ( 'url' ) ;
var util = require ( 'util' ) ;
http. createServer ( function ( req, res ) {
res. writeHead ( 200 , {
'Content-Type' : 'text/html; charset=utf8' } ) ;
var params = url. parse ( req. url, true ) . query;
res. write ( "website_name is:" + params. name) ;
res. write ( "\n" ) ;
res. write ( "website URL is:" + params. url) ;
res. write ( "\n" ) ;
res. end ( util. inspect ( url. parse ( req. url, true ) ) ) ;
} ) . listen ( 3000 ) ;
console. log ( 'Server running at http://127.0.0.1:3000/' ) ;
2、获取Post请求内容
POST 请求的内容全部的都在请求体中,http.ServerRequest 并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作。
比如上传文件,而很多时候我们可能并不需要理会请求体的内容,恶意的POST请求会大大消耗服务器的资源,所以 node.js 默认是不会解析请求体的,当你需要的时候,需要手动来做。
var http = require ( 'http' ) ;
var querystring = require ( 'querystring' ) ;
var postHTML =
'菜鸟教程 Node.js 实例 ' +
'' +
' +
'网站名: ' +
'网站 URL: ' +
' ' +
'' +
'' ;
http. createServer ( function ( req, res ) {
var body = "" ;
req. on ( 'data' , function ( chunk ) {
body += chunk; } ) ;
req. on ( 'end' , function ( ) {
body = querystring. parse ( body) ;
res. writeHead ( 200 , {
'Content-Type' : 'text/html; charset=utf8' } ) ;
if ( body. name && body. url) {
res. write ( "网站名:" + body. name) ;
res. write ( " " ) ;
res. write ( "网站 URL:" + body. url) ;
} else {
res. write ( postHTML) ;
}
res. end ( ) ;
} ) ;
} ) . listen ( 3000 ) ;
console. log ( 'Server running at http://127.0.0.1:3000/' ) ;
四、创建Web服务器/客户端
Node.js 提供了 http 模块,http 模块主要用于搭建 HTTP 服务端和客户端,使用 HTTP 服务器或客户端功能必须调用 http 模块
Client - 客户端,一般指浏览器,浏览器可以通过 HTTP 协议向服务器请求数据
Server - 服务端,一般指 Web 服务器,可以接收客户端请求,并向客户端发送响应数据
1、 Node 创建 Web 服务器
var http = require ( 'http' ) ;
var fs = require ( 'fs' ) ;
var url = require ( 'url' ) ;
http. createServer ( function ( request, response ) {
var pathname = url. parse ( request. url) . pathname;
console. log ( "Request for " + pathname + " received." ) ;
fs. readFile ( pathname. substr ( 1 ) , function ( err, data ) {
if ( err) {
console. log ( err) ;
response. writeHead ( 404 , {
'Content-Type' : 'text/html' } ) ;
} else {
response. writeHead ( 200 , {
'Content-Type' : 'text/html' } ) ;
response. write ( data. toString ( ) ) ;
}
response. end ( ) ;
} ) ;
} ) . listen ( 8080 ) ;
console. log ( 'Server running at http://127.0.0.1:8080/' ) ;
DOCTYPE html >
< html>
< head>
< meta charset = " utf-8" >
< title> 教程(oob.com) title>
head>
< body>
< h1> 我的第一个标题 h1>
< p> 我的第一个段落。 p>
body>
html>
运行server.js文件,在浏览器输入http://127.0.0.1:8080/index.html
, 即可看到index.html返回的内容
2、 使用 Node 创建 Web 客户端
新建client.js如下,前提:前面服务端sever.js正在运行,且浏览器已输入http://127.0.0.1:8080/index.html;新开窗口运行client.js则会打印出服务端index.html的源代码;
额,我觉得该脚本更像一个爬虫程序~,请求数据,然后获得源代码响应
var http = require ( 'http' ) ;
var options = {
host: 'localhost' ,
port: '8080' ,
path: '/index.html'
} ;
var callback = function ( response ) {
var body = '' ;
response. on ( 'data' , function ( data ) {
body += data; } ) ;
response. on ( 'end' , function ( ) {
console. log ( body) ;
}
var req = http. request ( options, callback) ;
req. end ( ) ;
五、Express 框架
Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具
使用 Express 可以快速地搭建一个完整功能的网站
Express 框架核心特性:可以设置中间件来响应 HTTP 请求,定义了路由表用于执行不同的 HTTP 请求动作, 可以通过向模板传递参数来动态渲染 HTML 页面
Express框架学习
1、安装express
body-parser
:node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据
cookie-parser
:这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象
multer
:node.js 中间件,用于处理 enctype=“multipart/form-data”(设置表单的MIME编码)的表单数据
npm list express
最终能看到express框架的版本
npm init -f
npm install express --save
npm install body-parser --save
npm install cookie-parser --save
npm install multer --save
npm list express
2、express简单案例
主要使用的路由规则是get和post两种
以下脚本生成一个 express 实例 app,挂载了一个根路由控制器,然后监听 8082端口并启动程序,可看到对应输出
代码注解:访问根路径时,依然返回Hello Get ;访问路径:name占位符;以及访问正则匹配的路径
var express = require ( 'express' ) ;
var app = express ( ) ;
app. get ( '/' , function ( req, res ) {
res. send ( 'Hello Get' ) ;
} )
app. get ( '/users/:name' , function ( req, res ) {
res. send ( 'hello, ' + req. params. name)
} )
app. get ( '/name=ab*cd' , function ( req, res ) {
console. log ( req. params)
res. send ( '正则匹配' ) ;
} )
app. post ( '/' , function ( req, res ) {
res. send ( 'Hello POST' ) ;
} )
var server = app. listen ( 8082 ) ;
3、Python使用nodejs运行js脚本
第一步:在当前目录下创建LJ.js文件,该文件是逆向扣出来的js脚本,关键代码如下,一定要提供导出模块接口module.exports = req
,调用该js文件需要传入两个参数lat_lng, num ,最后返回get_max_min函数的结果
req = function ( lat_lng, num ) {
c = Wa ( lat_lng) ;
return get_max_min ( c, num)
}
module. exports = req
第二步:在同一目录下创建LJserver.js
文件如下,运行该文件,在浏览器输入http://127.0.0.1:8082/get_LJ_latlng?lng=120.5811424828&lat=31.3010678543&Se=inner&num=12
,即可返回上面LJ.js的结果; 这其实就是浏览器请求数据,nodejs的服务作为响应返回了结果这么一个过程;
var Ljresp = require ( './LJ.js' )
var express = require ( 'express' ) ;
var app = express ( ) ;
var bodyParser = require ( 'body-parser' ) ;
app. use ( bodyParser. json ( ) ) ;
app. use ( bodyParser. urlencoded ( {
extended: true } ) ) ;
app. get ( "/get_LJ_latlng" , function ( req, res ) {
var lat_lng = {
"lng" : req. query. lng,
"lat" : req. query. lat,
"Se" : "inner"
} ;
res. send ( Ljresp ( lat_lng, req. query. num) ) ;
} ) ;
const server = app. listen ( 8082 ) ;
第三步:Python脚本请求js服务的结果,前面的LJserver.js在运行状态下
import requests
from urllib. parse import urlencode
lat_lng = {
"lng" : 120.5811424828 ,
"lat" : 31.3010678543 ,
"Se" : "inner" ,
"num" : 12
}
url = f"http://127.0.0.1:8082/get_LJ_latlng? {
urlencode( lat_lng) } "
print ( url)
resp = requests. get( url, timeout= 10 )
print ( resp. json( ) )