【问题标题】:"Simple" RESTful API using node/mongo/express使用 node/mongo/express 的“简单”RESTful API
【发布时间】:2015-05-27 20:09:28
【问题描述】:

我对服务器端 javascript 完全陌生,因此非常感谢任何帮助。

我最近按照本教程 https://www.youtube.com/watch?v=p-x6WdwaJco 使用 node.js mongodb 和 express 构建了一个简单的 RESTful API。本教程还使用了一个名为 node-restful https://github.com/baugarten/node-restful 的库。 首先我在根目录下建了一个server.js:

// Dependencies
var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');

// Mongo DB
mongoose.connect('mongodb://localhost/rest_test');

// Express
var app = express();
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());

// Routes
app.use('/api', require('./routes/api'));

var test = require('./routes/api');

// Start Server
app.listen(3000);
console.log('API is running on port 3000')

然后我在 root/routes 中创建了 api.js

// Dependencies
var express = require('express');
var router = express.Router();

// Models
var Product = require('../models/product');

// Routes
Product.methods(['get', 'put', 'post', 'delete']);
Product.register(router, '/products');

// Return router
module.exports = router;

最后我在 root/models 中创建了一个名为 product.js 的文件:

// Dependencies
var express = require('express');
var restful = require('node-restful');
var mongoose = restful.mongoose;

// Schema
var productSchema = new mongoose.Schema({
    name: String,
    sku: String,
    price: Number,
});

// Return model
module.exports = restful.model('Products', productSchema);

这是我的问题所在(我认为) - 服务器运行良好,直到我尝试在 api.js 的 mongoose.Schema() 上使用 .methods() 和 .register()。它一直告诉我 .methods 在产品中未定义。

我一遍又一遍地阅读本教程,并没有发现我的代码有任何问题。所有库似乎都已正确安装。 Mongo 正在运行...

我感觉 mongoose.Schema 没有正确注册,但不知道为什么一切似乎都和教程中的一样——教程中没有类似的抱怨——所以我只能假设这是“我的问题”,但我就是看不出哪里出错了......

提前谢谢....

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    我完全复制了您的代码,然后能够毫无问题地运行它。所以这很可能意味着您的本地环境中存在一些问题。很可能是旧的/过时的软件包。

    在您的根目录中,创建一个名为 package.json 的文件,其内容如下:

    {
      "name": "stackoverflow-30492214",
      "version": "0.0.1",
      "private": true,
      "scripts": {
        "start": "node server.js"
      },
      "dependencies": {
        "body-parser": "^1.12.4",
        "express": "^4.12.4",
        "mongoose": "^3.9.7",
        "node-restful": "^0.1.18"
      },
      "devDependencies": {}
    }
    

    然后,在同一目录中,在您的终端中运行 npm clean && npm install。这应该下载/安装/构建 package.json 定义的依赖项。完成后,尝试再次运行服务器node server.js。您可能会收到有关 mongoose 包是不稳定版本的警告,但您不应该看到任何 .method() 或 .register() 未定义错误。

    【讨论】:

    • 感谢您的回复:)
    • 感谢您的回复 :) --- 不过运气不好。我什至创建了一个新的根文件夹,将 js 文件复制过来,并使用您给我的包 json 进行了全新的 npm 安装 - 我收到了“不稳定的猫鼬警告”,并且在相同的错误下方 - 方法未在 Product.xml 中定义。我在下载 mongodb 的开发版本时遇到问题,所以我下载了二进制版本 - 不确定这是否与它有关......谢谢
    • hm... 你能通过命令行连接到 mongodb 吗?在您的终端中,尝试运行mongo 然后输入db 应该会列出您拥有的任何本地数据库。然后确认您可以写:db.foobar.insert({foo: 'bar'}) 并检查它是否存在db.foobar.find()。另外..您使用的是什么版本的节点? node --version
    • 是的,一切似乎都很好,可以写入数据库,-node -v 0.12.4
    • 好吧,对不起,它起作用了......我不确定问题最初是什么,但你的 package.json 似乎已经成功了。昨天没有太多时间...非常感谢您的时间。
    猜你喜欢
    • 1970-01-01
    • 2021-09-04
    • 2015-09-22
    • 1970-01-01
    • 2015-11-07
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多