Javascript 节点服务器不响应cors模式下带有自定义头的POST请求
我在后端使用expressjs,在前端使用fetch。我的前端由Web包开发服务器托管,该服务器在端口3000上本地运行。我的express js服务器正在端口3001上本地运行。我需要随请求发送一些自定义标题 我的express js服务器正在使用“morgan”登录终端。我的服务器的代码如下所示: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
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())