意思:获取整个HTML页面而不是mongodb数据模型

时间:2016-07-05 15:35:46

标签: express mongoose mean

我正在使用mean和this tutorial

一切正常,但我的app.get('/api/todos/', function(req, res)文件中的server.js会返回我的整个HTML页面,而不是我的mongodb数据库中的todos数据!

我甚至可以看到我的整个index.html进入我的firebug查看器。

如果我在server.js函数中通过 app.post 更改 app.get ,我正确获取todo数据模型,并且我的AngularJS前端显示了todos数据正确,但我想使用GET,而不是POST!

就像app.get或AngularJS部分$http.get根本不起作用。

你有什么想法吗?

iller是我差点确定它在另一台电脑上工作,而不是那样的行为!

这是前端控制器,就像在教程中一样:

var scotchTodo = angular.module('scotchTodo', []);

function mainController($scope, $http) {
    $scope.formData = {};


    $http.get('/api/todos/')
        .success(function(data) {
              $scope.todos = data;  

             console.log(data); 
        })
        .error(function(data) {
            console.log('Error: ' + data);
        });

    // Quand on soumets le formulaire ajouter, transmettre la chose à faire à l'api node
    $scope.createTodo = function() {
        $http.post('/api/todos', $scope.formData)
            .success(function(data) {
                $scope.formData = {}; // Supprimer le contenu du formulaire pour que l'utilisateur puisse en utiliser un autre.
                $scope.todos = data;
                console.log(data);
            })
            .error(function(data) {
                console.log('Error: ' + data);
            });
    };

    // Supprimer une chose à faire après l'avoir vérifié.
    $scope.deleteTodo = function(id) {
        $http.delete('/api/todos/' + id)
            .success(function(data) {
                $scope.todos = data;
                console.log(data);
            })
            .error(function(data) {
                console.log('Error: ' + data);
            });
    };

}

这是server.js文件,在教程中是llike:

// server.js

// set up ========================
var express  = require('express');
var app      = express();                               // create our app w/ express
var mongoose = require('mongoose');                     // mongoose for mongodb
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)

// configuration =================

mongoose.connect('mongodb://localhost/nod');     // connect to mongoDB database on modulus.io

app.use(express.static(__dirname + '/public'));                 // set the static files location /public/img will be /img for users
app.use(morgan('dev'));                                         // log every request to the console
app.use(bodyParser.urlencoded({'extended':'true'}));            // parse application/x-www-form-urlencoded
app.use(bodyParser.json());                                     // parse application/json
app.use(bodyParser.json({ type: 'application/vnd.api+json' })); // parse application/vnd.api+json as json
app.use(methodOverride());

// Le serveur va se mettre à écouter avec cette commande (Taper node server.js dans la ligne de commande windows, sous le bon répertoire) ======================================
app.listen(8080);
console.log("L app écoute sur le port 8080 dans les navigateurs");



 // definire le modèle de données qui s'apelle todo qui veut dire "chose à faire" =================
var Todo = mongoose.model('Todo', {
    text : String
});


// routes ======================================================================

// application -------------------------------------------------------------
app.get('*', function(req, res) {
    res.sendfile('./public/index.html'); //Charge la seule vue, c est angular qui s occupe du routing en front end
});

// api ---------------------------------------------------------------------
// obtenir tous les todo
app.get('/api/todos/', function(req, res) {

    // utiliser moongoose pour obtenir tous les todo dans la database
    Todo.find(function(err, todos) {

        // if there is an error retrieving, send the error. nothing after res.send(err) will execute
        if (err)
            res.send(err)

        res.json(todos); // Retourne tous les todo au format json
    });
});

// Créer un todo et retourner tous les todo après création
app.post('/api/todos', function(req, res) {

    // create a todo, information comes from AJAX request from Angular
    Todo.create({
        text : req.body.text,
        done : false
    }, function(err, todo) {
        if (err)
            res.send(err);

        // get and return all the todos after you create another
        Todo.find(function(err, todos) {
            if (err)
                res.send(err)
            res.json(todos);
        });
    });

});

// supprimer un todo
app.delete('/api/todos/:todo_id', function(req, res) {
    Todo.remove({
        _id : req.params.todo_id
    }, function(err, todo) {
        if (err)
            res.send(err);

        // get and return all the todos after you create another
        Todo.find(function(err, todos) {
            if (err)
                res.send(err)
            res.json(todos);
        });
    });
});

最后,AngularJS模板与教程中的模板相同

2 个答案:

答案 0 :(得分:0)

哦好的!

最后他们在教程中回答:

我不得不取代明星'*' 它会成功

答案 1 :(得分:0)

来自https://scotch.io/tutorials/creating-a-single-page-todo-app-with-node-and-angular

  

我们的API路线,之前 app.listen,添加此路线:

app.get('*', function(req, res) {
    res.sendfile('./public/index.html'); // load the single view file (angular will handle the page changes on the front-end)
});