45 architecture api mongodb node.js express
我是Node(通常是所有后端Web开发)的初学者,我已经开始在Node中编写RESTful API.我正试图解决一些问题.
我的应用程序使用Express和Mongoose,我正在使用该express-resource
模块轻松创建API资源的CRUD路由.但有一些我不满意的事情,并认为我可以做得更好.
第一个是猫鼬.如果我想为我的API编写测试,我无法将Mongoose存根到内存数据中.然而,所有的教程似乎都指向Mongoose,我真的不确定我应该使用什么.
其次,我的资源似乎有很多样板代码.这真的是在Node.js中创建RESTful API的最佳方式吗?还有其他模块可以帮助我创建我的CRUD路线吗?我相信有一些方法可以直接从你的架构创建CRUD路由,而不再需要代码,但我真的不确定如何.
我见过那些项目,比如Tower.js和CompoundJS(正式的RailwayJS)似乎是这些全面的解决方案,解决的问题远远超过我的问题.也许我应该使用它们,但我真的只希望Node.js应用程序成为API而已.我独立于API处理前端.
为了提供一些背景,这是我目前的情况.目前,我有一个在Mongoose中定义的模型:
var mongoose = require('mongoose')
, Schema = mongoose.Schema
, Link
var LinkSchema = new Schema({
uri: String,
meta: {
title: String,
desc: String
},
shares: [{
uid: Schema.Types.ObjectId,
date: Date,
message: String
}]
})
Link = module.exports = mongoose.model('Link')
Run Code Online (Sandbox Code Playgroud)
接下来,我为CRUD路由定义控制器:
var mongoose = require('mongoose')
, _ = require('underscore')
, Link = mongoose.model('Link')
exports.load = function (req, id, fn) {
Link.findById(req.params.link, function (err, link) {
if (err) {
return res.send(err)
}
fn(null, link)
})
}
exports.index = function (req, res) {
var filterByUser = req.query.user ? { 'shares.uid': req.query.user } : {}
Link.find(filterByUser, function (err, links) {
if (err) {
return res.send(err)
}
res.send(links)
})
}
exports.create = function (req, res) {
var link = new Link(req.body)
link.save(function (err) {
if (err) {
// TODO: send 404
return res.send(err)
}
res.send(link)
})
}
exports.show = function (req, res) {
res.send(req.link)
}
exports.update = function (req, res) {
req.link = _(req.link).extend(req.body)
req.link.save(function (err, link) {
if (err) {
return res.send(err)
}
res.send(link)
})
}
exports.patch = exports.update
exports.destroy = function (req, res) {
req.link.remove(function (err) {
if (err) {
return res.send(err)
}
res.send()
})
}
Run Code Online (Sandbox Code Playgroud)
最后,我使用该express-resource
模块将这些控制器映射到Express应用程序顶部的必要CRUD路由.
app.resource('api/links', require('../resources/links'))
Run Code Online (Sandbox Code Playgroud)
Ben*_*oir 29
你应该考虑改善
如果你想使用express,你也可以查看我做的这个项目 - 称为node-restful.
这个库似乎更成熟,但有更多功能:https://github.com/jspears/mers
归档时间: |
|
查看次数: |
61035 次 |
最近记录: |