This question already has answers here:
How does Access-Control-Allow-Origin header work?
                            
                                (14个回答)
                            
                    
                    
                        CORS issue doesn't occur when using POSTMAN
                            
                                (1个答案)
                            
                    
                2年前关闭。
        

    

我在node.js中拥有服务器端构建而在angular中具有客户端构建并创建API POST和GET的问题,请向我展示Cors问题

这是客户端角度



    import { Component, OnInit } from '@angular/core';
import { Http, Response  } from "@angular/http";
import { Router } from '@angular/router';
import { HttpClient , HttpClientModule , HttpHeaders } from '@angular/common/http';





@Component({
  selector: 'app-root',
  templateUrl: './app.login.html',
  styleUrls: ['./app.login.css'],
})
export class AppComponent  {
  title = 'app';

  constructor(private http: Http){
   this.LogIn();
   this.ping();

  }

  LogIn() {
    return this.http.post("localhost:3000/api/login/checklogin",  {
      username: 'mohsen',
      password: '2345'

    })
    .subscribe(
      res => {
        console.log(res.json());
      },
      err => {
        console.log("Error occured")
      }
    );
  }







const express = require('express');
const router = express.Router();

var app = express();

const listUsers = [
    {"username" : "wael", "password" : "1234"},
    {"username" : "mohsen", "password" : "2345"}
];


router.get('/ping.json' ,(req, res, next) => {
    res.status(200).json({
        message: 'pong'
    });
});

// router.post('/checklogin',(req, res ,next) =>{
router.post('/checklogin',(req, res ,next) =>{
    console.log(req.body);

    for(let i =0 ; i <listUsers.length ; i ++){
        console.log(listUsers[i]);
        if(listUsers[i].username === req.body.username && listUsers[i].password === req.body.password){
            res.status(200).json({
                message: "Success"
            });
            return;
        }
    }
    // not found
    res.status(200).json({
        message: "Failed"
    });
});





问题向我显示此消息,“请求的资源上没有'Access-Control-Allow-Origin'标头”错误。

最佳答案

发生这种情况是因为Postman没有发送Option请求来检查Cors策略。 More information here

您可以使用Express中的CORS启用它。

const express = require('express');
const router = express.Router();
var cors = require('cors');

var app = express();

app.use(cors())

const listUsers = [
    {"username" : "wael", "password" : "1234"},
    {"username" : "mohsen", "password" : "2345"}
];


router.get('/ping.json' ,(req, res, next) => {
    res.status(200).json({
        message: 'pong'
    });
});

// router.post('/checklogin',(req, res ,next) =>{
router.post('/checklogin',(req, res ,next) =>{
    console.log(req.body);

    for(let i =0 ; i <listUsers.length ; i ++){
        console.log(listUsers[i]);
        if(listUsers[i].username === req.body.username && listUsers[i].password === req.body.password){
            res.status(200).json({
                message: "Success"
            });
            return;
        }
    }
    // not found
    res.status(200).json({
        message: "Failed"
    });
});

10-05 20:54
查看更多