一般来说,我是 Node/Express 和 API 的新手。长话短说,我是一名前端人员,第一次涉足后端和架构。我的问题分割如下:
应用描述:一个允许用户查看医疗数据记录的网络应用。
所需功能:在页面加载时更改 json 记录的状态。当用户打开记录(页面)时,我想自动将 json 对象从 UNDIAGNOSED 更改为 DIAGNOSED。这需要在服务器端完成以避免暴露 api 端点,出于安全原因需要保持隐藏。将其视为“已读/未读”电子邮件。打开后,它会将状态更改为“已读”
问题:...我是新手...
//When the server GETs a request to this URL
router.get('/content/:contentid', function(req, res, next) {
// Configure the REST platform call
var platform_options = {
resource: '/content/' + req.params.contentid,
method: 'POST',
json: "diagnosis_state: DIAGNOSED"
};
// Make the call
var platform = ihplatform(_config, req.session, platform_options, callback);
platform.execute();
// Result processing
function callback(error, response, body) {
console.log(response.body);
}
});
我正在使用由另一位开发人员在内部构建的自定义 HTTP API。调用的端点是通过 re.params.contentid 动态生成的。您还会注意到调用本身内置于 platform.execute 函数中。
在尝试修改工作调用时,正在进行一些复制/粘贴操作。
我的问题是:如何通过 express.js 对某个 url 的 HTTP 请求对远程 API 进行 api POST 调用?
最佳答案
这是您可以在 express.js 上执行的操作 -
1) 在单独的 js 文件中编写路由映射模块,其中可以列出所有映射。下面是模块文件的代码片段
function mappings(app)
{
var email = require('./routes/emails');// ./routes/emails is js file location exporting UpdateEmail variable which contains function for update
app.put('/email/update', email.UpdateEmail); // mapping url /email/update to exported variable UpdateEmail
}
2) 在 app.js 文件中添加以下语句,其中 mapRoutes 是在步骤 1 中创建的 .js 文件
require('./mapRoutes').mappings(app);
3) 以下是示例 app.js 文件
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/users', users);
app.all('*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');
res.header('Access-Control-Allow-Credentials', false);
res.header('Access-Control-Max-Age', '86400');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
next();
});
app.options('*', function(req, res) {
res.send(200);
});
require('./mapRoutes').mappings(app);
/// catch 404 and forwarding to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
/// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;
4) 在上面的代码上运行的实时网站 - kidslaughs.com
关于javascript - 如何从 Express.js 发布到 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26475916/