简体   繁体   English

尝试使用Express.router和Passport传递到控制器时,req.url.indexOf('?')引发未定义的错误

[英]req.url.indexOf('?') throws undefined error when trying to route to a controller with Express.router and passport

var search = 1 + req.url.indexOf('?'); var search = 1 + req.url.indexOf('?'); throws an error saying the statement to my left is undefined. 抛出错误,说我左边的语句未定义。 Im using passportjs to create a login/registration page on my angular frontend. 我正在使用passport.js在我的有角前端上创建登录/注册页面。 trying to make a post request to nodejs results in the above error. 尝试向nodejs发出发布请求会导致上述错误。 Im entirely new to the mean stack and ive tried several different tutorials to get myself up and running but have had some road blocks. 我对平均筹码完全陌生,我尝试了几种不同的教程来使自己起步并运行,但遇到了一些障碍。 can someone point in the right direction? 有人可以指出正确的方向吗? I've played around with just about every file moving around code and trying different solutions but nothing works, or one problem is solved but another occurs. 我试过几乎每个文件都在代码中移动并尝试不同的解决方案,但没有任何效果,或者一个问题解决了,但又出现了另一个问题。

server.js server.js

// set up ========================
var DATABASE = "mongodb://localhost:27017/smartHomeDevices";
var express = require("express");
var mongoose = require("mongoose"); //require monogDB Driver
var morgan = require("morgan"); // log requests to the console (express4)
var bodyParser = require("body-parser"); // pull information from HTML POST (express4)
var methodOverride = require("method-override"); // simulate DELETE and PUT (express4)
var passport = require("passport");
//var _ = require("lodash");
var http = require('http');
//setup
//app.models =
require("./Models/moduleIndex");
//  Bring in the Passport config after model is defined
require('./config/passport');
//registering routes
var routes = require("./routes");
//Create App
var app = express();
app.use(passport.initialize());
//Add Middleware for REST API
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json);
app.use(bodyParser.json({
    type: 'application/vnd.api+json'
}));
app.use(methodOverride("X-HTTP-Method-Override"));
app.use(morgan("dev"));
//CORS Support, makes API Public

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,");
    res.header("Access-Control-Allow-Headers", "Content-Type,Authorization");
    next();
});
app.use("/", routes);
// Connect to the db
mongoose.connect(DATABASE);
mongoose.connection.once("open", function() {
    var serv = http.createServer(function(req, res) {
        res.setHeader("Access-Control-Allow-Origin", "*");
        res.setHeader("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");
        res.setHeader("Access-Control-Allow-Headers", "Content-Type,Authorization");
        res.writeHead(200, {
            'Content-Type': 'text/plain'
        });
        res.end();
        console.log(routes(req.method, req.url));
    }).listen(3000);
    //module.exports = app;
    console.log("Listening on 3000");
});

routes.js routes.js

//setup
var express = require('express');
var router = express.Router();
var jwt = require('express-jwt');
var auth = jwt({
  secret: 'MY_SECRET',
  userProperty: 'payload'
});


var ctrlProfile = require('./Controllers/ProfileController');
var ctrlAuth = require('./Controllers/RegisterUserController');
// profile
router.get('/profile', auth, ctrlProfile.profileRead);

// authentication
router.post('/register', ctrlAuth.register);
router.post('/login', ctrlAuth.login);

module.exports = router;
/*module.exports = {
  "/smartDevices" : require("./Controllers/SmartDeviceController"),
  "/registeredUsers": require("./Controllers/RegisterUserController")
};*/

resgisteredUsersControllers.js resgisteredUsersControllers.js

//setup
//var Resource = require("resourcejs");
var restful = require("node-restful");
var passport = require('passport');
var mongoose = require('mongoose');
var User = mongoose.model('registeredUserModel');

var sendJSONresponse = function(res, status, content) {
  res.status(status);
  res.json(content);
};

module.exports.register = function(req,res) {
  console.log(req);
  console.log("nw logging res");
  console.log(res);
    var user = new User();

    user.name = req.body.name;
    user.email = req.body.email;
    user.username = req.body.username;
    user.setPassword(req.body.password);

    user.save(function(err) {
      if(err)
        console.log(err);
      var token;
      token = user.generateJwt();
      res.status(200);
      res.json({
        "token" : token
      });
    });
    next();
};
module.exports.login = function(req, res) {

    passport.authenticate('local', function(err, user, info) {
        var token;

        // If Passport throws/catches an error
        if (err) {
            res.status(404).json(err);
            return;
        }

        // If a user is found
        if (user) {
            token = user.generateJwt();
            res.status(200);
            res.json({
                "token": token
            });
        } else {
            // If user is not found
            res.status(401).json(info);
        }
    })(req, res);
    next();
};
/*module.exports = function(app, route) {
    //setup controller for restful
    //  Resource(app,"",route,app.models.registeredUserModel).rest();
    var rest = restful.model("registeredUserModel",
        app.models.registeredUserModel
    ).methods(["get", "put", "post", "delete"]);
    rest.register(app, route);
    //return Middleware
    return function(req, res, next) {
        next();
    };
};
*/

ProfileController.js ProfileController.js

var mongoose = require('mongoose');
var User = mongoose.model('registeredUserModel');

module.exports.profileRead = function(req, res) {

  // If no user ID exists in the JWT return a 401
  if (!req.payload._id) {
    res.status(401).json({
      "message" : "UnauthorizedError: private profile"
    });
  } else {
    // Otherwise continue
    User
      .findById(req.payload._id)
      .exec(function(err, user) {
        res.status(200).json(user);
      });
  }
};

请求对象没有url字段。

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

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