首页 > 编程语言 >微服务-node.js

微服务-node.js

时间:2023-04-25 10:08:10浏览次数:38  
标签:node function 服务 log res app req js console


权威解释

Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js’ package ecosystem, npm, is the largest ecosystem of open source libraries in the world.

Express

Express is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications.

解决跨域问题

本地文件(使用 jquery Ajax请求)

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Title</title>
   <script src="jquery.js"></script>
</head>
<body>
<script>
   $.ajax({
       url:'http://localhost:8081',
       type: 'get',

       success: function (res) {
       console.log(res);
       },error:function (res) {     
       }

   })
</script>
</body>
</html>

index.js(服务器文件)

var express = require('express');

var app = express();

var bodyParser = require('body-parser');
//解决跨域的经典方法。不加这个就会存在跨域问题。
app.all('*',function (req, res, next) {

   res.header('Access-Control-Allow-Origin', '*');

   res.header('Access-Control-Allow-Headers', 'Content-Type,Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');

   res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE,OPTIONS');
   if (req.method == 'OPTIONS') {
       res.send(200);
   }
   else {
       next();
   }

});
//  主页输出 "Hello World"
app.get('/', function (req, res) {
   console.log("主页 GET 请求");
   res.send('Hello GET');
})


//  POST 请求
app.post('/', function (req, res) {
   console.log("主页 POST 请求");
   res.send('Hello POST');
})

//  /del_user 页面响应
app.get('/del_user', function (req, res) {
   console.log("/del_user 响应 DELETE 请求");
   res.send('删除页面');
})

//  /list_user 页面 GET 请求
app.get('/list_user', function (req, res) {
   console.log("/list_user GET 请求");
   res.send('用户列表页面');
})

// 对页面 abcd, abxcd, ab123cd, 等响应 GET 请求
app.get('/ab*cd', function(req, res) {   
   console.log("/ab*cd GET 请求");
   res.send('正则匹配');
})


var server = app.listen(8081, function () {

  var host = server.address().address
  var port = server.address().port

  console.log("应用实例,访问地址为 http://%s:%s", host, port)

})

跨域是违背同源策略的。同源指的是域名,协议,端口号都相同。

node作为中转服务器(demo)

拦截请求,将请求转发到后台,获取后台的返回结果。
后台用Spring Boot。关键代码如下:

package org.springframework.gs_rest_service;

import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
        return new Greeting(counter.incrementAndGet(),
                            String.format(template, name));
    }
}

通过http://localhost:8089/greeting和获得返回结果:
{“id”:4,”content”:”Hello, World!”}

发送HTTP请求了。有一个简单的工具可以用,Simplified HTTP request client,可以比较方便的模拟请求。
node中转服务端的代码修改如下:

var express = require('express');
var request = require('request');

var app = express();

var bodyParser = require('body-parser');
//解决跨域的经典方法。不加这个就会存在跨域问题。
app.all('*',function (req, res, next) {

   res.header('Access-Control-Allow-Origin', '*');

   res.header('Access-Control-Allow-Headers', 'Content-Type,Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');

   res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE,OPTIONS');
   if (req.method == 'OPTIONS') {
       res.send(200);
   }
   else {
       next();
   }

});
//  主页输出 "Hello World"
app.get('/', function (req, res) {
   console.log("主页 GET 请求");
    request('http://localhost:8089/greeting', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body) ;// Show the HTML for the baidu homepage.
    res.send(body);
  }
})

})


//  POST 请求
app.post('/', function (req, res) { 

   console.log("主页 POST 请求");
   res.send('Hello POST');
})

//  /del_user 页面响应
app.get('/del_user', function (req, res) {
   console.log("/del_user 响应 DELETE 请求");
   res.send('删除页面');
})

//  /list_user 页面 GET 请求
app.get('/list_user', function (req, res) {
   console.log("/list_user GET 请求");
   res.send('用户列表页面');
})

// 对页面 abcd, abxcd, ab123cd, 等响应 GET 请求
app.get('/ab*cd', function(req, res) {   
   console.log("/ab*cd GET 请求");
   res.send('正则匹配');
})


var server = app.listen(8081, function () {

  var host = server.address().address
  var port = server.address().port

  console.log("应用实例,访问地址为 http://%s:%s", host, port)

})

本地文件修改如下:

<body>
<div id="test" ></div>
<script>
   $.ajax({
       url:'http://localhost:8081',
       type: 'get',
       success: function (res) {        document.getElementById("test").innerText = res;
       },error:function (res) {     
       }
   })
</script>
</body>

通过本地文件发起请求,运行结果如下:

微服务-node.js_跨域问题

错误是由于搜狗浏览器本身的问题,在火狐和IE11下没有问题。可能是浏览器对谷歌的扩展存在问题。


标签:node,function,服务,log,res,app,req,js,console
From: https://blog.51cto.com/u_16087831/6223417

相关文章

  • js字符串与json对象处理
    直接上代码:<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>点绘制济南省</title></head><bodystyle="margin:0;overflow:hidden;background:#fff;width:100%;height:100%;position:absolu......
  • vue3+jointjs 使用模板添加元素
    关于如何在Vue3和JointJS中使用拖拽模板来创建节点元素,可以按照以下步骤进行:1.安装JointJS使用npm进行安装:```npminstalljointjs```2.在Vue3中创建JointJS容器在Vue3中创建一个组件,用于创建JointJS的画布和节点。在组件的生命周期方法`mounted`......
  • 前端vue使用jsencrypt进行RAS加密/解密
    前端安装:npminstalljencrypt--sava在utils下创建jsencrypt.js文件,内容如下:importJSEncryptfrom"jsencrypt/bin/jsencrypt.min";/**RSA秘钥对生成网站http://web.chacuo.net/netrsakeypair*//**公钥512位*/constpublicKey='MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJ......
  • 【代理设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介代理模式(ProxyPattern)是一种结构型设计模式,用一个类来代理另一个类或几个类的功能。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。延迟初始化(虚拟代理)。如果你有一个偶尔使用的重量级服务对象,一直保持该对象运行会消耗系统资源时,可使用代理模式。访问......
  • 关于 SAP Commerce Cloud 构建的 Node.js 版本号问题
    假设SAPccv2某个时间点A上cloudportal支持Node.js14,16和18三个版本,然后到了时间点B,就只支持16和18了。那么在时间点A基于14构建和部署的镜像仍然能够在时间点B工作,只是在时间点B之后,不能再继续触发版本14的构建和部署了。SAPCommerceCloud不......
  • Swift Codable协议实战:快速、简单、高效地完成JSON和Model转换!
    前言Codable是Swift4.0引入的一种协议,它是一个组合协议,由Decodable和Encodable两个协议组成。它的作用是将模型对象转换为JSON或者是其它的数据格式,也可以反过来将JSON数据转换为模型对象。Encodable和Decodable分别定义了encode(to:)和init(from:)两个协议......
  • 华为云弹性公网IP服务,实惠又便捷!
    在互联网时代,网络是建立万物互联的桥梁,能让我们人在家中坐,天下事尽知。而用户对公共信息进行访问和浏览时,就需要一个公网IP地址,相应地,网站要提供服务也同样需要公网IP来实现,而一个具有多重组合变化的弹性公网IP服务,可以起到事半功倍的效果,作为可以提供独立的公网IP资源,包括公网IP地......
  • JS-数学表达式正则表达式支持(包含希腊字母、小数点等)
    //技术状况规则/**evt:{target:{value:''}},row:{"propName":"""propRule":""}*/functioncheckRule(evt,row,propName,propRule){//匹配a=5,a>5,a<5,a≤6,a≥5等varrule1=/[ΆΈ-ώa-zA-z]+([1-9]......
  • C/C++服务端客户端通讯程序[2023-04-24]
    C/C++服务端客户端通讯程序[2023-04-24]Socket通讯程序..服务器端).pptx任务:Socket通讯程序开发·基本要求(80分)∶完成一对一的Socket客户端与服务器程序·进阶要求(90分)∶在完成基本要求基础上,将服务器端程序改为多线程程序·高级要求(100分)︰将客户端和服务器端都改为多......
  • vue3+jointjs demo
    下面是使用Vue3和JointJS添加元素的示例代码:1.安装JointJS```terminalnpminstalljointjs--save```2.创建JointJS图形```javascriptimport{ref,onMounted}from'vue';import*asjointfrom'jointjs';exportdefault{setup(){constgraphC......