node.js - CORS 不允许访问
问题描述
我已经查看了许多关于堆栈溢出的不同帖子并解决了问题,这些帖子有类似或相同问题的人,但是,似乎没有解决方案对我有用。
我不断收到错误
Access to XMLHttpRequest at 'http://localhost:3000/email?email=j' from origin 'https://mai...' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我认为添加app.use(cors());
会解决它,但问题仍然存在。
const path = require("path");
const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");
const mongoose = require("mongoose");
var userController = require("./controllers/userController.js");
var emailController = require("./controllers/emailController.js");
var app = express();
app.use(cors());
mongoose.connect(
"redactedForStackOverflow",
{ useUnifiedTopology: true, useNewUrlParser: true },
err => {
if (!err) console.log("MongoDB connection succeeded...");
else
console.log(
"Error in DB connection : " + JSON.stringify(err, undefined, 2)
);
}
);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use("/", express.static(path.join(__dirname, "angular")));
var port = 3000;
app.listen(process.env.PORT || port, () =>
console.log("Server started at port : " + port)
);
app.use("/users", userController);
app.use("/email", emailController);
app.use((req, res, next) => {
res.sendFile(path.join(__dirname, "angular", "index.html"));
});
module.exports = app;
编辑
添加服务文件
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/operator/toPromise';
import { User } from './user.model';
import { UserComponent } from '../user/user.component';
@Injectable({
providedIn: 'root'
})
export class UserService {
selectedUser: User;
users: User[];
readonly baseURL = 'http://localhost:3000/users';
codeSentIn;
constructor(private http: HttpClient) {}
postUser(users: User) {
const codeOnItsWay = this.codeSentIn;
this.resetCode();
return this.http.post<any>(this.baseURL, {users, codeOnItsWay});
}
resetCode() {
this.codeSentIn = '';
}
getUserList() {
return this.http.get(this.baseURL);
}
getSpecificUser(id) {
return this.http.get<any>(this.baseURL + '/' + id);
}
findPositionInLine(email) {
return this.http.get<any>(this.baseURL + '/positionInLine/' + email);
}
getUserForLogin(email) {
return this.http.get(this.baseURL + '/login/' + email);
}
sendEmailToCheck(emailToCheck) {
return this.http.get('http://localhost:3000/email', { params: { email: emailToCheck }});
}
}
解决方案
更新:可能缺少 cors 选项:
var corsOptions = {
origin: 'localhost:3000',
credentials : true
}
如此处所述:Node JS CORS 模块未设置 Access-Control-Allow-Credentials 标头
或者,删除 app.use(cors());
您可以在所有请求中手动添加标头:
app.use((req, res,next) => {
res.set('Access-Control-Allow-Origin', '*');
next();
});
只需在前面添加上面的代码块
app.use("/users", userController);
app.use("/email", emailController);
app.use((req, res, next) => {
res.sendFile(path.join(__dirname, "angular", "index.html"));
});
推荐阅读
- php - 如何使用字符串限制解码 html 特殊字符?
- sql - 获取上次上传和上一年上次上传
- vue-router - Vue-router 从 this.$route.matched 中的路由获取动态路径
- python - 图像文件上的shutil.move权限被拒绝
- linux - 如何在 Bash 中创建 3 秒计时器?
- java - JavaFX TitledPane 在正文和标题处更改背景颜色
- javascript - 循环行,检查 2 个单元格是否相等,然后更改单元格值
- php - 如何将控制器的私有属性用作静态属性?
- python - Django 按特定相关对象字段排序对象
- spring-boot - Spring cloud Turbine 服务未在 Rabbit 流上订阅