簡體   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('?'); 拋出錯誤,說我左邊的語句未定義。 我正在使用passport.js在我的有角前端上創建登錄/注冊頁面。 嘗試向nodejs發出發布請求會導致上述錯誤。 我對平均籌碼完全陌生,我嘗試了幾種不同的教程來使自己起步並運行,但遇到了一些障礙。 有人可以指出正確的方向嗎? 我試過幾乎每個文件都在代碼中移動並嘗試不同的解決方案,但沒有任何效果,或者一個問題解決了,但又出現了另一個問題。

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

//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

//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

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