一些express api调用在重构一些api调用后使用React时会出现cors错误



我知道这个问题已经被遗忘了,但我还没能用它解决我的特定问题。

当我开始我的项目时,我也有cors错误,但在添加了以下内容后,它们消失了,直到今天我决定折射应用程序的代码,它突然停止工作,有趣的事实是,旧代码工作正常。:

const cors = require('cors');
app.use(cors());
app.options('*', cors());

我也试过

app.use(cors({ 
origin: 'http://localhost:3000'
}));

但关键是,每一个api调用都是有效的,只有一个调用除外。更好的是,它是随机工作的,有时会给出cors错误,有时不会。这就是我输的原因。

我已经下载了一个chrome扩展Moesif origin and cors changer,这似乎是使它工作的唯一方法。但这不是一个有效的解决方案。

为什么会发生这种情况?

我的api调用就是这个。正如你所观察到的,一个简单的调用带有一些数据库操作,就这样,它应该返回res.status为100,但我在使用chrome扩展时看不到它,否则它将被ccors阻塞

//generate calendar
app.post('/generateCalendar', async (req, res) => {
const userId = req.body.userId
const yearsToLive = req.body.yearsToLive
const registerDate = req.body.registerDate
function filterDate(date) {
var stringDate = moment(date).format('YYYY-MM-DD').toString();
console.log("dentro del filter date")
var result = stringDate.match(/(?:(?!T).)*/)
return result[0];
}
function getWeeksToLive(death_date, birth_date) {
//returns the weeks to live between death and birth date, rounded to upper week
var weeks_to_live = moment(death_date).diff(moment(birth_date), 'days') / 7;
console.log("semanas a vivir: " + Math.ceil(weeks_to_live))
return Math.ceil(weeks_to_live);
}

//sets the deathDate and weeksToLive in the database
db.query("SELECT * from users where id =" + userId).then(data => {
var birth_date = data[0].birth_date
var deathDate = ""
//sets the death_date and the weeks to live
deathDate = moment(filterDate(birth_date)).add(yearsToLive, 'years')
db.query("UPDATE users SET death_date = '" + moment(deathDate).format('YYYY-MM-DD').toString() + "' , weeks_to_live = '" + getWeeksToLive(deathDate, birth_date) + "' WHERE id = '" + userId + "';").then(data => {
console.log(data)
/*******/
//Sets the yearsToLive and registerDate in the database
db.query("UPDATE users SET years_to_live =  '" + yearsToLive + "' , register_date = '" + registerDate + "'  WHERE id = '" + userId + "';").then(data => {
console.log(data)
db.query("INSERT INTO calendar (user_id) values ('" + userId + "');").then(data => {
console.log(data)
// res.send(data)
/*******/
//Sets all the field for the calendar
db.query("INSERT INTO calendar_field (text, rating, calendar_id, week_number) select '', 0, c.id, g.wn from calendar c join users u on u.id = c.user_id cross join generate_series(1, u.weeks_to_live) as g(wn);").then(data => {
console.log(data);
console.log("series generated")
/******/
//the lifeExpectanceSet restriction is removed and access to dashboard is granted
db.query("UPDATE user_permissions SET life_expectancy =  'false' , dashboard = 'true'  WHERE user_id = '" + userId + "';").then(data => {
console.log("everything generated")
res.sendStatus(100)
console.log(data)
}).catch(err => console.log(err))
}).catch(err => console.log(err))
})
}).catch(err => {
console.log(err)
res.send(err)
})
}).catch(err => console.log(err))
})


})

这是以前工作时的旧代码,除了重构之外,我什么都没做

//generate calendar
app.post('/generateCalendar', async (req, res) => {
const userId = req.body.userId
const yearsToLive = req.body.yearsToLive
const registerDate = req.body.registerDate
function filterDate(date) {
var stringDate = moment(date).format('YYYY-MM-DD').toString();
console.log("dentro del filter date")
var result = stringDate.match(/(?:(?!T).)*/)
return result[0];
}
function getWeeksToLive(death_date, birth_date) {
//returns the weeks to live between death and birth date, rounded to upper week
var weeks_to_live = moment(death_date).diff(moment(birth_date), 'days') / 7;
console.log("semanas a vivir: " + Math.ceil(weeks_to_live))
return Math.ceil(weeks_to_live);
}

//sets the deathDate and weeksToLive in the database
db.query("SELECT * from users where id =" + userId).then(data => {
var birth_date = data[0].birth_date
var deathDate = ""
//sets the death_date and the weeks to live
deathDate = moment(filterDate(birth_date)).add(yearsToLive, 'years')
db.query("UPDATE users SET death_date = '" + moment(deathDate).format('YYYY-MM-DD').toString() + "' , weeks_to_live = '" + getWeeksToLive(deathDate, birth_date) + "' WHERE id = '" + userId + "';").then(data => {
console.log(data)
}).catch(err => console.log(err))
})
//Sets the yearsToLive and registerDate in the database
db.query("UPDATE users SET years_to_live =  '" + yearsToLive + "' , register_date = '" + registerDate + "'  WHERE id = '" + userId + "';").then(data => {
console.log(data)
db.query("INSERT INTO calendar (user_id) values ('" + userId + "');").then(data => {
console.log(data)
res.send(data)
})
}).catch(err => {
console.log(err)
res.send(err)
})
//Sets all the field for the calendar
db.query("INSERT INTO calendar_field (text, rating, calendar_id, week_number) select '', 0, c.id, g.wn from calendar c join users u on u.id = c.user_id cross join generate_series(1, u.weeks_to_live) as g(wn);").then(data => {
console.log(data);
}).catch(err => console.log(err))

})

好的,所以问题是res.sendStatus((由于某种原因无法工作,我切换到res.send("string"(,它完成了

最新更新