Angularjs API发布错误:MongoDB&;离子应用

Angularjs API发布错误:MongoDB&;离子应用,angularjs,mongodb,mongoose,ionic-framework,Angularjs,Mongodb,Mongoose,Ionic Framework,我想做的是:将我的mongolab db连接到我的ionic应用程序。(我会使用Firebase,但Firebase没有文本搜索,这是我需要的) 为了获得一些指导,我遵循了()中的示例 但是,我得到了一个错误: 未能加载资源:服务器以404状态响应 (未找到) 我的文件结构: -计划 我知道我可能错过了一些基本的东西。我不明白我的server.js是怎么被爱奥尼亚载入的 下面是我的server.js的一个片段(只是相关部分) // set up ========================

我想做的是:将我的mongolab db连接到我的ionic应用程序。(我会使用Firebase,但Firebase没有文本搜索,这是我需要的)

为了获得一些指导,我遵循了()中的示例

但是,我得到了一个错误:

未能加载资源:服务器以404状态响应 (未找到)

我的文件结构: -计划

我知道我可能错过了一些基本的东西。我不明白我的server.js是怎么被爱奥尼亚载入的

下面是我的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)
var uriUtil = require('mongodb-uri');

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

var mongodbUri = 'mongodb://<myusername>:<mypass>@ds036648.mongolab.com:36648/<mydb>';
var mongooseUri = uriUtil.formatMongoose(mongodbUri);
mongoose.connect(mongooseUri);     // connect to mongoDB database on modulus.io

// listen (start app with node server.js) ======================================
app.listen(8100);
console.log("App listening on port 8100");

// define model =================
var Todo = mongoose.model('Todo', {
    text : String
});

// create todo and send back all todos after creation
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);
        });
    });

});

您的问题似乎在这里:

$http.post('/api/todos', $scope.formData)
它应该指向一个服务器:所以它应该是这样的:

$http.post('https://localhost:8100/api/todos', $scope.formData)

首先,您需要在非
8100
的端口上运行节点服务器,因为爱奥尼亚使用
8100
端口。写

app.listen(3000);
而不是

app.listen(8100);
现在对于api请求,使用以下命令

$http.post('http://localhost:3000/api/todos', $scope.formData)
但这一次你会得到一个错误

请求的资源上不存在“access control allow origin”标头

这是因为出于安全原因,浏览器会阻止它,因为它通常允许来自同一来源的请求。因此,解决方案是通过在运行窗口中使用以下命令禁用安全性来打开chrome

chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security

您的ionic服务器和API服务器应该是两个不同的服务器,这一行是$http.post('/API/todos',$scope.formData)看起来很奇怪,因为你应该请求另一台服务器,你也在节点上运行server.js,对吗?谢谢你的出色的anwser,但是当我将我的应用部署到服务器上时,我必须再次更改每个文件中从localhost:8100到mywebsitename的路径?它应该指向你的api路径。因此,如果您在本地运行服务器进行测试,它将与上面的一样。如果不是,那么它应该指向您的服务器。所以是的,你必须改变它。
app.listen(8100);
$http.post('http://localhost:3000/api/todos', $scope.formData)
chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security