你好,我对github上的foodme express示例有疑问:
代码:
var express = require('express');
var fs = require('fs');
var open = require('open');
var RestaurantRecord = require('./model').Restaurant;
var MemoryStorage = require('./storage').Memory;
var API_URL = '/api/restaurant';
var API_URL_ID = API_URL + '/:id';
var API_URL_ORDER = '/api/order';
var removeMenuItems = function(restaurant) {
var clone = {};
Object.getOwnPropertyNames(restaurant).forEach(function(key) {
if (key !== 'menuItems') {
clone[key] = restaurant[key];
}
});
return clone;
};
exports.start = function(PORT, STATIC_DIR, DATA_FILE, TEST_DIR) {
var app = express();
var storage = new MemoryStorage();
// log requests
app.use(express.logger('dev'));
// serve static files for demo client
app.use(express.static(STATIC_DIR));
// parse body into req.body
app.use(express.bodyParser());
// API
app.get(API_URL, function(req, res, next) {
res.send(200, storage.getAll().map(removeMenuItems));
});
我不明白api文件夹在哪里。它不存在,我不明白信息是如何从那里进出的。我找不到了。
有人可以向我解释一下吗?
另一个问题: 餐厅有一个资源
foodMeApp.factory('Restaurant', function($resource) {
return $resource('/api/restaurant/:id', {id: '@id'});
});
并且在餐厅控制器中有一个查询:
var allRestaurants = Restaurant.query(filterAndSortRestaurants);
以及以下几行:
$scope.$watch('filter', filterAndSortRestaurants, true);
function filterAndSortRestaurants() {
$scope.restaurants = [];
// filter
angular.forEach(allRestaurants, function(item, key) {
if (filter.price && filter.price !== item.price) {
return;
}
if (filter.rating && filter.rating !== item.rating) {
return;
}
if (filter.cuisine.length && filter.cuisine.indexOf(item.cuisine) === -1) {
return;
}
$scope.restaurants.push(item);
});
// sort
$scope.restaurants.sort(function(a, b) {
if (a[filter.sortBy] > b[filter.sortBy]) {
return filter.sortAsc ? 1 : -1;
}
if (a[filter.sortBy] < b[filter.sortBy]) {
return filter.sortAsc ? -1 : 1;
}
return 0;
});
};
我不清楚的事情是: 我们如何只是一个函数,甚至没有激活它。 据我所知,我们应该通过以下查询:
{id: $routeParams.restaurantId}
但我们只传递了对函数的引用。没有任何意义。
有人可以详细说明这个吗?
再次感谢。答案 0 :(得分:0)
“api”不是文件夹。
每个请求都将通过app.get
方法。
此方法将响应API_URL变量中定义的路由/api/restaurant
。
答案 1 :(得分:0)
var API_URL = '/api/restaurant';
var API_URL_ID = API_URL + '/:id';
var API_URL_ORDER = '/api/order';
这些行只是定义了向下插入Express的字符串常量。它们不是文件夹。
app.get(API_URL, function(req, res, next) {
res.send(200, storage.getAll().map(removeMenuItems));
});
因此,对app.get(API_URL...
的此函数调用告诉Express“查找指向URL (your app's domain)/api/restaurant
的GET请求,并执行此函数来处理此类请求。”