我正在尝试制作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 /?#'请求是成功的 - 有谁知道为什么会这样?