嗨,我是Node js的新手,我为此使用了表达框架
如果我在下面将标题传递给中间件,则我的中间件将运行两次
const express = require('express');
const port = 3003;
const app = express();
app.use( function(req, res, next){
console.log('This is called twice when headers are passed in request:');
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "*");
next();
});
app.get('/', function(req, res, next){
console.log('hey im called');
res.send({message: 'hi'})
});
const server = app.listen(port, function(error){
if (error){
console.log(`Error: ${error}`)
return
}
console.log(`server is listining on ${port}, ${this}`)
});
从浏览器控制台$.ajax({ url: 'http://localhost:3003', headers: { x: 1 , y: 1}})
调用
答案 0 :(得分:1)
似乎您正在从与localhost:3003
浏览器不同的域进行AJAX调用,它将首先在实际API之前发送pre-flight option
调用。
您可以在pre-flight
或CORS
Here
解决方案:
您可以在根URL /
上呈现html页面,该页面将包含ajax
调用,并将您现有的api路由放置为
app.get('/test', function(req, res, next){
console.log('hey im called');
res.send({message: 'hi'})
});
您的ajax呼叫将是
$.ajax({ url: 'http://localhost:3003/test', headers: { x: 1 , y: 1}})