gpt4 book ai didi

Openshift 上的 Node.js 出现错误 400 但在本地计算机上正常工作

转载 作者:搜寻专家 更新时间:2023-10-31 22:20:37 25 4
gpt4 key购买 nike

我的基于 Node + MongoDB 的 REST API 在本地 Node 服务器上运行良好,并返回正确的输出。但是 Express(可能!)在 Openshift 上部署时返回错误 400 Bad Request。知道如何调试应用程序吗?我尝试在有问题的方法中放置一些 console.log 语句,但即使是那些也没有被调用。

顺便说一句,一些示例代码:

应用程序.js:

var express = require('express');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var app = express();

var userController = require('./Controllers/user');
var authController = require('./Controllers/auth');
mongoose.connect(process.env.OPENSHIFT_MONGODB_DB_URL + 'dbname');
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With , content-type, Authorization ,x-access-token ,' +
'x-auth-email ,x-auth-password');
next();
});

app.post('/signin',authController.authorize,userController.signin);

Controller /auth.js:

var passport = require('passport');
var User = require('../Models/user');
var LocalStrategy = require('passport-local').Strategy;

passport.use(new LocalStrategy(function(email,password,callback) {
console.log('passport called');
User.findOne({email:email},function(err, user){
console.log('email at passport: ' + email);
if(err){
return callback(err);}


if(!user){return callback(null,false);}

user.matchPassword(password,function(err,isMatch){
if(err){return callback(err);}

if(!isMatch){return callback(null,false);}

console.log('isMatch: ' + isMatch);
return callback(null,user);
});
});
}));

exports.authorize = passport.authenticate('local', { session : false });

controllers/user.js:

 var User = require('../Models/user');
var jwt = require('jsonwebtoken');
exports.signin = signin= function (req,res){
User.findOne({email:req.body.email},function(err, user){
if(err){res.send(err);}


console.log(user);
user.token = jwt.sign(user.password, 'SECRET_KEY');
user.save(function (err,user) {
if (err) {
res.send(err);
}
res.json({email:user.email,token:user.token});
})
});
};

在 Postman 中使用 POST 调用 signin 路由会在本地服务器中返回 json 中的预期数据,但在部署到 Openshift 时会返回 HTTP 400 Bad Request。我什至尝试将 express 降级到 Openshift 上的版本,但问题仍然存在。

最佳答案

解决了!显然,passport.js 是罪魁祸首。 Passport 在我传递 (email,password,function()) 时使用 (username,password,function())

最终代码auth.js:

 passport.use(new LocalStrategy({usernameField: 'email',
passwordField: 'password'},
(function(username,password,callback) {

关于Openshift 上的 Node.js 出现错误 400 但在本地计算机上正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34727738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com