#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;