Node js Rest API 不工作 - Plesk Hosting Server [英] Node js Rest API not working - Plesk Hosting Server

查看:68
本文介绍了Node js Rest API 不工作 - Plesk Hosting Server的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Node js Rest API 在 prod 服务器中不起作用.它在本地工作正常.

Node js Rest API not working in the prod server. it is locally working fine.

server.js

var app = require('./app');
var http = require('http');
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
var server = http.createServer(app);
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
function normalizePort(val) {
    var port = parseInt(val, 10);
    if (isNaN(port)) {
        return val;
    }
    if (port >= 0) {
        return port;
    }
    return false;
}
function onError(error) {
    if (error.syscall !== 'listen') {
        throw error;
    }
    var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;
    switch (error.code) {
        case 'EACCES':
            console.error(bind + ' requires elevated privileges');
            process.exit(1);
            break;
        case 'EADDRINUSE':
            console.error(bind + ' is already in use');
            process.exit(1);
            break;
        default:
            throw error;
    }
}
function onListening() {
    var addr = server.address();
    var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port;
    console.log('Listening on ' + bind);
}

app.js

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json())
var cors = require('cors');
app.use(cors());
const db = require('./app/config/db.config.js');
const Role = db.role;



const auth = require('./app/router/auth.routes');
app.get('/', (req, res) => { res.send('Hey app.js!') });
app.use('/api/auth',auth);

module.exports = app;

auth.routes.js

auth.routes.js

const router = require("express").Router();
const verifySignUp = require('./verifySignUp');
const authJwt = require('./verifyJwtToken');
const controller = require('../controller/auth.controller');

router.get('/', (req, res) => { res.send('Hey this auth.routes.js!') });
router.post('/signup', [verifySignUp.checkDuplicateUserNameOrEmail], controller.signup);
router.post('/signin', controller.signin);

module.exports = router;

auth.controller.js

auth.controller.js

const db = require('../config/db.config.js');
const config = require('../config/config.js');
const User = db.user;
const Role = db.role;

const Op = db.Sequelize.Op;

var jwt = require('jsonwebtoken');
var bcrypt = require('bcryptjs');

exports.signup = (req, res) => {
    // Save User to Database
    console.log("Processing func -> SignUp");

    User.create({
        firstName: req.body.firstName,
        lastName: req.body.lastName,
        userName: req.body.userName,
        email: req.body.email,
        passWord: bcrypt.hashSync(req.body.passWord, 8),
        phone: req.body.phone
    }).then(user => {
        Role.findAll({
            where: {
                name: {
                    [Op.or]: req.body.roles
                }
            }
        }).then(roles => {
            user.setRoles(roles).then(() => {
                res.send({ data: "User registered successfully!" });
            });
        }).catch(err => {
            res.status(500).send("Error -> " + err);
        });
    }).catch(err => {
        res.status(500).send("Fail! Error -> " + err);
    })
}

exports.signin = (req, res) => {
    console.log("Sign-In");

    User.findOne({
        where: {
            userName: req.body.userName
        }
    }).then(user => {
        if (!user) {
            return res.status(404).send('User Not Found.');
        }

        var passwordIsValid = bcrypt.compareSync(req.body.passWord, user.passWord);
        if (!passwordIsValid) {
            return res.status(401).send({ auth: false, accessToken: null, reason: "Invalid Password!" });
        }

        var token = jwt.sign({ id: user.id }, config.secret, {
            expiresIn: 86400 // expires in 24 hours
        });
        var authoritie = [];
        user.getRoles().then(roles => {
            for (let i = 0; i < roles.length; i++) {
                authoritie.push(roles[i].name.toUpperCase())
            }
            res.status(200).send({
                auth: true,
                accessToken: token,
                userId: user.id,
                userName: user.userName,
                authorities: authoritie
            });
        }
        )


    }).catch(err => {
        res.status(500).send('Error -> ' + err);
    });
}

获取:

get:

发布:

推荐答案

不知道,如果你已经有了答案,但我遇到了同样的问题.

Don't know, if you already have an answer, but i had the same problem.

修复方法是设置 Websites &域 ->主机设置 ->首选域.

它被设置为www.domain.xy".

我将没有 www" 的域 domain.xy" 设置为首选.

I set the domain "domain.xy" without "www" as preferred.

问题是,nginx 重定向了来自domain.xy"的请求.到www.domain.xy"使用重定向 301.然后 POST 变为 GET 请求.

The problem was, that nginx redirects the requests from "domain.xy" to "www.domain.xy" with a redirect 301. Then the POST becomes a GET Request.

此更改后不再执行重定向,我收到了 POST 请求.

After this change a redirect wasn't executed anymore and i got my POST Request.

这篇关于Node js Rest API 不工作 - Plesk Hosting Server的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆