【发布时间】:2020-05-03 21:38:18
【问题描述】:
我已经查看了许多关于堆栈溢出的不同帖子并解决了问题,这些帖子有类似或相同问题的人,但是,似乎没有任何解决方案适合我。
我不断收到错误
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 }});
}
}
【问题讨论】:
-
@Raymond 如果您向下滚动到标记为答案的帖子下方的帖子,它会显示我正在尝试做的事情
-
您能否显示发出请求的客户端代码,以便我们准确查看请求的内容。此外,
app.use(cors());不足以处理所有可能的跨源请求。我们需要知道实际请求中的内容,因为您可能需要做更多的事情并支持 OPTIONS 请求处理程序。如果您查看 chrome 调试器的网络选项卡和正在发送的实际请求,您会学到很多。如果您与我们分享,那么我们可以为您提供更好的帮助。 -
@RyanSoderberg 但我看不到您设置标题“Access-Control-Allow-Origin”,如果您查看它的第二部分,您需要添加
res.set('Access-Control-Allow-Origin', '*');来设置标题在您的要求中 -
嗨@jfriend00,我已将我的服务从客户端添加到 OP