POST 404(未找到)拆分成单独的 user.js 文件时

POST 404 (not Found) when splitting into separate user.js file

当对本地主机地址“/users”使用 $http POST 方法时,我收到 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 分开以使其更清晰。谢谢!

由于您要让您的应用将 user.js 文件用于“/users”下的路由,因此您需要为 POST 请求更新 user.js 的路径到 '/' 否则它将它路由到 '/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;