В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin»: средний стек - PullRequest
0 голосов
/ 04 июля 2018

Я установил cors & body parser. Это мой authSrvice.js файл

resetemail(emailid) {
   let headers = new Headers();
   headers.append('Content-Type','application/json');
   return this.http.post('http://localhost:3000/api/femail',emailid,{headers:headers})
   .map(res => res.json());
 } 

Это из файла маршрутов

const User = require('../models/user');
router.post('/femail',(req,res,next) => {
    const emailid = req.email.body;
    User.getUserByUsername(username, (err, user) => {
      if(err) throw err;
    if(!user){
      return res.json({success: false, msg: 'User not found'});
    }
    else {
      return res.json({success: true, msg: 'success'});
    }
    });
  });

В консоли Chrome отображается ошибка

Не удалось загрузить http://localhost:3000/api/femail: Нет Заголовок «Access-Control-Allow-Origin» присутствует в запрошенном ресурс. Происхождение 'http://localhost:8100' поэтому не допускается доступ. Ответ имел HTTP-код состояния 400. Блокировка перекрестного происхождения (CORB) заблокировала ответ перекрестного происхождения http://localhost:3000/api/femail с текстом MIME типа / html. Увидеть https://www.chromestatus.com/feature/5629709824032768 для более подробности.

В моем cmd отображается как

SyntaxError: неожиданный токен m в JSON в позиции 0 в JSON.parse () at createStrictSyntaxError (E: \ project-1 \ node_modules \ body-parser \ lib \ types \ json.js: 158: 10) при разборе (E: \ project-1 \ node_modules \ body-parser \ lib \ types \ json.js: 83: 15) в E: \ project-1 \ node_modules \ body-parser \ lib \ read.js: 121: 18 at invokeCallback (E: \ project-1 \ node_modules \ raw-body \ index.js: 224: 16) сделано (E: \ project-1 \ node_modules \ raw-body \ index.js: 213: 7) в IncomingMessage.onEnd (E: \ project-1 \ node_modules \ raw-body \ index.js: 273: 7) на emitNone (events.js: 106: 13) на IncomingMessage.emit (events.js: 208: 7) в endReadableNT (_stream_readable.js: 1064: 12) в _combinedTickCallback (внутренняя / process / next_tick.js: 138: 11) at process._tickCallback (internal / process / next_tick.js: 180: 9)

Это мой server.js

    const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const cors = require('cors');
const passport = require('passport');
const mongoose = require('mongoose');
const config = require('./config/database');
var methodOverride = require('method-override');
var session = require('express-session')
var nodemailer = require('nodemailer');
var async = require('async');
var crypto = require('crypto');
var LocalStrategy = require('passport-local').Strategy;
var cookieParser = require('cookie-parser');
// Connect To Database
mongoose.connect(config.database);
// On Connection
mongoose.connection.on('connected', () => {
    console.log('Connected to database '+config.database);
});

// On Error
mongoose.connection.on('error', (err) => {
    console.log('Database error: '+err);
});

const app = express();
const port = 3000;
//app.use(require('connect').bodyParser());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
const users = require('./routes/users');
app.use('/api',users);
// CORS Middleware
app.use(cors());

// Set Static Folder
app.use(express.static(path.join(__dirname, 'public')));

app.get('/', (req, res) => { 
    res.send('Invalid endpoint');
});

// Body Parser Middleware


app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
    next();
  });

app.use(session({ secret: 'this is a cat' }));  
app.use(cookieParser());
// Passport Middleware
app.use(passport.initialize());
app.use(passport.session());

require('./config/passport')(passport);
app.use('/users', users);



app.listen(port, () => {
   console.log("Server started on port:", port); 
});

Я не знаю, что не так.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

app.use(cors()); должен предшествовать всем другим промежуточным программам.

0 голосов
/ 04 июля 2018

Ответ имеет HTTP-код состояния 400.

Добавление заголовков Access-Control-Allow-Origin не решит проблему, если сервер выдает ошибку.

Вам нужно выяснить, почему выдается ошибка.

Скорее всего, это связано с тем, что POSTing JSON запускает запрос опций предполетной проверки, который сервер не может обработать.

Замените свое собственное промежуточное программное обеспечение CORS на этот стандартный модуль , который поддерживает предварительные запросы OPTIONS.

...