Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点服务器不响应cors模式下带有自定义头的POST请求_Javascript_Node.js_Express_Fetch - Fatal编程技术网

Javascript 节点服务器不响应cors模式下带有自定义头的POST请求

Javascript 节点服务器不响应cors模式下带有自定义头的POST请求,javascript,node.js,express,fetch,Javascript,Node.js,Express,Fetch,我在后端使用expressjs,在前端使用fetch。我的前端由Web包开发服务器托管,该服务器在端口3000上本地运行。我的express js服务器正在端口3001上本地运行。我需要随请求发送一些自定义标题 我的express js服务器正在使用“morgan”登录终端。我的服务器的代码如下所示: const express = require('express') const bodyParser = require('body-parser') const morgan = requir

我在后端使用expressjs,在前端使用fetch。我的前端由Web包开发服务器托管,该服务器在端口3000上本地运行。我的express js服务器正在端口3001上本地运行。我需要随请求发送一些自定义标题

我的express js服务器正在使用“morgan”登录终端。我的服务器的代码如下所示:

const express = require('express')
const bodyParser = require('body-parser')
const morgan = require('morgan')
const fs = require('fs')
const path = require('path')
const mime = require('mime')
const http = require('http')
const cors = require('cors')

const server = express();

let whitelist = [
    'http://localhost:3000',
];
var corsOptions = {
    origin: function(origin, callback){
        var originIsWhitelisted = whitelist.indexOf(origin) !== -1;
        callback(null, originIsWhitelisted);
    },
    credentials: true
};
server.use(cors(corsOptions));
server.use(bodyParser());
server.use(morgan('dev'));
server.use(function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Content-Type, x-imei, X-API-Key, requestId, Authorization');
  res.header('Access-Control-Allow-Methods', '*');
  next()
})

server.post('/verify/identifier', function(req, res, next) {
  console.log(req.body)
  console.log(req.headers)
  res.send({"responseCode":"0012"});
});

server.listen(port, function() {
  console.log(`server hosted on port ${port}`)
})
我的前端代码是:

export function fetchMerchantApi(url, body) {
  let reqObj = {
    method: 'POST',
    headers: {
      "Content-Type": "application/json",
      "X-API-Key": secret_key,
      "requestId": getUniqueId()
    },
    cache: 'default',
    mode: 'cors'
  }
  try {
    return new Promise((res, rej) => {
      fetch(url, reqObj).then(result => {
        return result.json()
      }).then(data => {
        res(data)
      });
    })
  } catch(e) {
    throw new Error(e);
  }
}

fetchMerchantApi("http://localhost:3001/verify/identifier", reqBody).then(res => {
console.log(res);
})
所有导入、语法等都是正确的

chrome调试器工具的网络选项卡如下所示:

服务器的登录终端:

身体

[0]{customField1:'Y'

[0]imei:'358967064854480'

[0]是否存在:“Y”

[0]美孚诺:“9999999999”

[0]序列号:'ZY22285JKV'}

标题:

[0]{host:'localhost:3001'

[0]连接:“保持活动状态”

[0]“内容长度”:“119”

[0]“x-imei”:“358967064854480”

[0]来源:“”

[0]请求ID:'999999999300513303519185'

[0]“内容类型”:“应用程序/json”

[0]“用户代理”:“Mozilla/5.0(Linux;Android 6.0;Nexus 5 Build/MRA58N)AppleWebKit/537.36(KHTML,如Gecko)Chrome/58.0.3029.110 Mobile Safari/537.36'

[0]“x-api-key”:“L7XX5A9A4 EEA46054EF38B18B5E6FDBD2C5A”

[0]接受:“/”

[0]引用者:“”

[0]“接受编码”:“gzip,deflate,br”

[0]“接受语言”:“en-IN,en-GB;q=0.8,en-US;q=0.6,en;q=0.4'}

morgain日志:

[0]POST/cr/v2/merchant/verify/identifier 200 2.432 ms-23

在所有这些之后,我没有从后端得到任何错误和响应数据


有趣的是,我的rest客户(邮递员)工作得很好。我得到了邮递员的数据。

这是一个棘手的问题。这是一个
options
请求,即来自浏览器的飞行前请求。
选项
请求包含两个http头
访问控制请求头'和
访问控制方法'。 但看起来您允许cors选项中的每种方法

您可以启用飞行前请求,如


app.options('*',cors())
这是一个棘手的问题。这是一个
options
请求,即来自浏览器的飞行前请求。
选项
请求包含两个http头
访问控制请求头'和
访问控制方法'。 但看起来您允许cors选项中的每种方法

您可以启用飞行前请求,如

app.options('*',cors())