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;
当对本地主机地址“/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;