繁体   English   中英

无法获得任何响应Node.js Rest API

[英]Could not get any response nodejs rest api

我正在根据Joshmorony的本教程开发rest api,在Postman上进行测试时,我始终运行错误“无法获得任何响应”。 我已经在ionic3项目上消耗了端点,但仍然遇到相同的问题。 我做错了什么可能导致此错误? 多谢您的支持。

邮递员屏幕截图

这是我的代码。 在控制器文件夹controllers/authentication.js

const jwt = require('jsonwebtoken'); 
const bluebird = require('bluebird');
const nodemailer = require('nodemailer');
const User = require('../models/user');
const authConfig = require('../config/auth');
const crypto = bluebird.promisifyAll(require('crypto'));


/**
 * Generating JWT tokens
 * 
 */
function generateToken(user){
    return jwt.sign(user, authConfig.secret, {
        expiresIn: 10080
    });
}

function setUserInfo(request){
    return {
        _id: request._id,
        email: request.email,
        role: request.role
    };
}

/**
 * Local login authentication
 * 
 */
exports.login = function(req, res, next){

    var userInfo = setUserInfo(req.user);

    res.status(200).json({
        token: 'JWT ' + generateToken(userInfo),
        user: userInfo
    });

}

/**
 * Local registration
 * 
 */
exports.register = function(req, res, next){

    var email = req.body.email;
    var password = req.body.password;
    var role = req.body.role;

    if(!email){
        return res.status(422).send({error: 'You must enter an email address'});
    }

    if(!password){
        return res.status(422).send({error: 'You must enter a password'});
    }

    User.findOne({email: email}, function(err, existingUser){

        if(err){
            return next(err);
        }

        if(existingUser){
            return res.status(422).send({error: 'That email address is already in use'});
        }

        var user = new User({
            email: email,
            password: password,
            role: role
        });

        user.save(function(err, user){

            if(err){
                return next(err);
            }

            var userInfo = setUserInfo(user);

            res.status(201).json({
                token: 'JWT ' + generateToken(userInfo),
                user: userInfo
            })

        });

    });

}


/**
 * Roles Creation
 * 
 */
exports.roleAuthorization = function(roles){

    return function(req, res, next){

        var user = req.user;

        User.findById(user._id, function(err, foundUser){

            if(err){
                res.status(422).json({error: 'No user found.'});
                return next(err);
            }

            if(roles.indexOf(foundUser.role) > -1){
                return next();
            }

            res.status(401).json({error: 'You are not authorized to view this content'});
            return next('Unauthorized');

        });

    }

}

在模型文件夹中model/User.js

const mongoose = require('mongoose');
const bcrypt   = require('bcrypt-nodejs');

var UserSchema = new mongoose.Schema({

    email: {
        type: String,
        lowercase: true,
        unique: true,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    role: {
        type: String,
        enum: ['reader', 'creator', 'editor'],
        default: 'reader'
    },
    passwordResetToken: String,
    passwordResetExpires: Date,
    profile: {
        name: String,
        gender: String,
        location: String,
        picture: String
      }

}, {
    timestamps: true
});

UserSchema.pre('save', function(next){

    var user = this;
    var SALT_FACTOR = 5;

    if(!user.isModified('password')){
        return next();
    }

    bcrypt.genSalt(SALT_FACTOR, function(err, salt){

        if(err){
            return next(err);
        }

        bcrypt.hash(user.password, salt, null, function(err, hash){

            if(err){
                return next(err);
            }

            user.password = hash;
            next();

        });

    });

});

UserSchema.methods.comparePassword = function(passwordAttempt, cb){

    bcrypt.compare(passwordAttempt, this.password, function(err, isMatch){

        if(err){
            return cb(err);
        } else {
            cb(null, isMatch);
        }
    });

}

module.exports = mongoose.model('User', UserSchema);

路由routes.js

const AuthenticationController = require('./controllers/authentication'), 
      TodoController = require('./controllers/todo'), 
      express = require('express'),
      passportService = require('./config/passport'),
      passport = require('passport');

const requireAuth = passport.authenticate('jwt', {session: false}),
      requireLogin = passport.authenticate('local', {session: false});

module.exports = function(app){

var apiRoutes = express.Router(),
    authRoutes = express.Router(),
    todoRoutes = express.Router();

// Auth Routes
apiRoutes.use('/auth', authRoutes);

authRoutes.post('/register', AuthenticationController.register);
authRoutes.post('/login', requireLogin, AuthenticationController.login);
authRoutes.post('/forgot', AuthenticationController.postForgot);
authRoutes.post('/reset/:token', AuthenticationController.postReset);
authRoutes.post('/account/profile', requireAuth, AuthenticationController.postUpdateProfile);
authRoutes.post('/account/password', requireAuth, AuthenticationController.postUpdatePassword);

authRoutes.get('/protected', requireAuth, function(req, res){
    res.send({ content: 'Success'});
});

// Set up routes
app.use('/api', apiRoutes);

}

最后是app.js文件

const express  = require('express');
const app      = express();
const mongoose = require('mongoose');
const errorHandler = require('errorhandler');
const chalk = require('chalk');
const logger = require('morgan');
const bodyParser = require('body-parser');
const cors = require('cors');
const dotenv = require('dotenv');

const databaseConfig = require('./app/config/database');
const router = require('./app/routes');

/**
 * Load environment variables from .env file, where API keys and passwords are configured.
 */
dotenv.load({ path: '.env' });

/**
 * Connect to MongoDB.
 */
mongoose.Promise = global.Promise;
mongoose.createConnection(process.env.MONGODB_URI || process.env.MONGOLAB_URI);
mongoose.connection.on('error', (err) => {
  console.error(err);
  console.log('%s MongoDB connection error. Please make sure MongoDB is running.', chalk.red('✗'));
  process.exit();
});

/**
 * Express configuration.
 */
app.set('host', process.env.OPENSHIFT_NODEJS_IP || '0.0.0.0');
app.set('port', process.env.PORT || process.env.OPENSHIFT_NODEJS_PORT || 8080);
/**
 * Error Handler.
 */
app.use(errorHandler());

/**
 * Start Express server.
 */
app.listen(app.get('port'), () => {
  console.log('%s App is running at http://localhost:%d in %s mode', chalk.green('✓'), app.get('port'), app.get('env'));
  console.log('  Press CTRL-C to stop\n');
});

app.use(bodyParser.urlencoded({ extended: false })); // Parses urlencoded bodies
app.use(bodyParser.json()); // Send JSON responses
app.use(logger('dev')); // Log requests to API using morgan

app.use(cors());

router(app);

我设法得到该错误,当我在终端中管理该应用程序时,出现了以下错误“ DeprecationWarning: open()在mongoose> = 4.11.0中被弃用,请改用openUri() ,或者如果使用connect()则设置useMongoClient选项connect()createConnection() 。当我尝试修改mongoose.connect(process.env.MONGODB_URI || process.env.MONGOLAB_URI);时,请参见http://mongoosejs.com/docs/connections.html#use-mongo-clientmongoose.connect(process.env.MONGODB_URI || process.env.MONGOLAB_URI); mongoose.createConnection(process.env.MONGODB_URI || process.env.MONGOLAB_URI); 多数民众赞成在我得到“无法得到任何回应”的错误。 只是选择使用旧的connect() 希望这可以帮助遇到同样问题的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM