СООБЩЕНИЕ 404 (не найдено) при разделении на отдельные user.js файл

#angularjs #node.js #post #mongoose #http-status-code-404

#angularjs #node.js #Публикация #мангуст #http-status-code-404

Вопрос:

При использовании метода $ http POST для локального адреса хоста «/ users» я получаю ошибку 404 (не найдено).

Код # 1 (взаимодействует с кодом # 2)

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

app.use(bodyParser.json());

app.use(express.static(__dirname   '/public'));

mongoose.connect(process.env.MONGODB_URI || "mongodb://localhost:27017/goodies", function(err) {
  if(!err) {
    console.log("MONGOOSE connected");
  }
});

var userSchema = new mongoose.Schema({
  username: String,
  password: String,
  email: String,
  firstname: String,
  lastname: String,
  created: { type: Date, default: Date.now }

});

var User = mongoose.model('users', userSchema);

app.post('/users', function(req, res, next){
  var newUser = new User({
    firstname: req.body.firstname,
    lastname: req.body.lastname, 
    username: req.body.username,
    password: req.body.password,
    email: req.body.email 
  });
  newUser.save(function(err) {
    if (err) return res.status(400).send(err);
    return res.send();
  });
});

app.get('*', function(req, res, next){
  return res.redirect('/#'   req.originalUrl);
});

var port = process.env.PORT || 1337;

app.listen(port);
  

Код # 2 (взаимодействует с кодом # 1)

 app.controller('SignupController', function($scope, $http) {

  $scope.userSignup = function() {
    var newUser = {
      firstname: $scope.firstname,
      lastname: $scope.lastname,
      username: $scope.username,
      password: $scope.password,
      email: $scope.email
    };
    console.log(newUser);
    $http.post('/users', newUser).success(function (data){
      alert('signup success');

    });
  };
});
  

Код # 3 (разделяющий на user.js файл)

Здесь я получаю ошибку 404, упомянутую выше.

 var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');

mongoose.connect(process.env.MONGODB_URI || "mongodb://localhost:27017/goodies", function(err) {
  if(!err) {
    console.log("MONGOOSE connected");
  }
});

var userSchema = new mongoose.Schema({
  username: String,
  password: String,
  email: String,
  firstname: String,
  lastname: String,
  created: { type: Date, default: Date.now }
});

var User = mongoose.model('users', userSchema);

router.post('/users', function(req, res, next){
  var newUser = new User({
    firstname: req.body.firstname,
    lastname: req.body.lastname, 
    username: req.body.username,
    password: req.body.password,
    email: req.body.email 
  });

  newUser.save(function(err) {
    if (err) return res.status(400).send(err);
    return res.send();
  });
});

module.exports = router;
  

При разделении кода # 3 на user.js Я также добавляю несколько строк к коду # 1.

 var users = require('./routes/users.js');
app.use('/users', users);
  

Есть ли способ заставить это работать? Я разделяю код # 3, чтобы сделать его более чистым. Спасибо!

Ответ №1:

Поскольку вы сообщаете своему приложению использовать ваш user.js файл для маршрутов в разделе «/ users», вам необходимо обновить свой user.js путь для запросов POST к ‘/’ в противном случае он перенаправляет его в ‘/users / users’:

user.js файл

 var router = require('express').Router();

//...

// change '/users' to '/'
router.post('/', function(req, res, next){
  var newUser = new User({
    firstname: req.body.firstname,
    lastname: req.body.lastname, 
    username: req.body.username,
    password: req.body.password,
    email: req.body.email 
  });

  newUser.save(function(err) {
    if (err) return res.status(400).send(err);
    return res.send();
    });
});

module.exports = router;