启用CORS - ajax响应失败

时间:2015-07-23 15:52:58

标签: ajax node.js backbone.js express cors

我正在尝试制作ajax' POST'从骨干客户端请求到node.js服务器。我已经在服务器上启用了CORS,这似乎是成功的,因为我没有得到任何'允许跨越来源'控制台中的错误'并且服务器正在接收POSTED数据 - 我从客户端发布用户名/密码并在我的用户数据库中搜索匹配 - 服务器响应已找到用户名但我在客户端上收到ajax错误。请soemone请帮助 - 这已经杀了我好几天

这是我的客户端用户模型:

app.UserAuth = Backbone.Model.extend({
    defaults : {
    username : '',
    password : ''
},
initialize : function(){
    this.testReq()
},
testReq : function(){
    $.ajax({
        url : "http://localhost:8080/api/authenticate",
        method : "POST",
        dataType : "json",
        xhrFields : {
            withCredentials : true
        },
        data : {
            username:"bottles24",
            password:"yoyo1234"
        },
        success : function(data){
            console.log(data);
        },
        error : function(thrownError){
            console.log(thrownError)
        }
    });
}
});

这是我的server.js文件,它在与客户端不同的端口上运行:

var express = require('express'),
app     = express(),
bodyParser = require('body-parser'),
morgan     = require('morgan'),
mongoose = require('mongoose'),
uriUtil = require('mongodb-uri'),
jwt      = require('jsonwebtoken'),
config = require('./config'),
User = require('./models/user');

// enable CORS
var allowCrossDomain = function(req, res, next) {
res.header('Access-Control-Allow-Origin', 'http://localhost:4000');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization,     Content-Length, X-Requested-With');
res.header('Access-Control-Allow-Credentials', 'true');

// intercept OPTIONS method
if ('OPTIONS' == req.method) {
  res.send(200);
}
else {
  next();
}
};


var port = process.env.PORT || 8080;


var mongodbUri = config.database;
var mongooseUri = uriUtil.formatMongoose(mongodbUri);
mongoose.connect(mongooseUri);

app.set('superSecret', config.secret);

app.use(bodyParser.urlencoded({ extended : false }));
app.use(bodyParser.json());

app.use(morgan('dev'));

// get an instance of the router for API routes
var apiRoutes = express.Router();

apiRoutes.post('/authenticate', function(req, res){

console.log(req.body)
// find the User
User.findOne({
    username : req.body.username
}, function(err, user){
    if (err) throw err;

    if(!user){
        res.json({ success: false, message : 'Authentication failed'})
    }
    else if(user){

        // check password
        if (user.password != req.body.password){
            res.json({success : false, message : 'Authentication failed. Wrong Password'})
        }
        else{


            // if user is found and password is right
            // create a token
            var token = jwt.sign(user, app.get('superSecret'), {
                expiresInMinutes : 1440 // expires in 24 hours
            });

            // return the info including token as JSON
            res.json({
                success : true,
                message : 'Enjoy your token',
                token : token
            });
            console.log('user is found')
        }
    }
})
});

// apply the routes to the application with the prefix /api
app.use('/api', apiRoutes);


// start server
app.listen(port);
console.log('listening at port: '+ port)

当我初始化ajax请求时 - 我的服务器记录了'用户被找到'但出于某种原因,我没有收到任何回复给客户的信息 - 当我使用' Postman'来测试服务器代码时。一切正常,所以我假设它是前端的东西......任何人都可以看到问题是什么?任何帮助,将不胜感激。感谢

EDITED: 我终于得到了这个工作,但是由于某些原因,当URL是' localhost:4000'时,ajax请求仍然失败。 (这是我的Access-Control-Allow-Origin中指定的域) - 当URL是' localhost:4000 /?#'请求是成功的 - 有谁知道为什么会这样?

0 个答案:

没有答案