使用Express和Restify在一个应用中使用Node.js

9

我正在使用restify构建API,效果很好。但是我还需要在同一个应用程序中呈现一些网页。

我能否在一个应用程序中同时使用express和restify?

这是app.js中restify服务器的代码:

var restify = require('restify');
var mongoose = require('mongoose');


var server = restify.createServer({
    name : "api_app"
});

server.use(restify.queryParser());
server.use(restify.bodyParser());
server.use(restify.CORS());
mongoose.connect('mongodb://localhost/db_name');
server.get('/', routes.index);

server.post('/api_name', api.api_name);


server.listen(8000 ,"localhost", function(){
    console.log('%s listening at %s ', server.name , server.url);
});

如何在同一个app.js文件中创建express服务器?

谢谢

5个回答

7

就所有目的而言,restify和express不能在同一个node进程中共存,因为由于不幸的原因,它们都试图覆盖http请求/响应API的原型,这会导致不可预测的行为,你最终无法确定哪个已经完成了什么。我们可以在express应用程序中安全地使用restify客户端,但不适用于两个服务器。


3

我认为restify和express一样,只是创建了一个函数,你可以将其用作请求处理程序。尝试像这样做:

var express = require('express'),
    restify = require('restify'),
    expressApp = express(),
    restifyApp = restify.createServer();

expressApp.use('/api', restifyApp); // use your restify server as a handler in express
expressApp.get('/', homePage);

expressApp.listen(8000);

通过使用restify,我们试图避免使用express带来的所有开销。这可能有效,但你只是在把所有这些开销重新加回去,此时最好在express中一起实现您的api和www。也许反过来也可以?但我仍然持谨慎态度。 - Cory Mawhorter

1
如果你需要REST API和普通的网页,我认为你不需要再坚持使用restify了。你可以随时只使用express,并在其上构建你的API而不是restify,因为express几乎可以做到restify所能做到的一切。

0
如果你需要做一个 REST API 和 Web 应用程序,我建议你使用一个基于 Express 的框架。
我创建了 rode 框架,它非常适合处理 REST 并且可以与 Express 一起使用。

0
我会使用本地API服务器和Express代理路由来解决这个问题。虽然有一点延迟,但这是将Web框架与API分离的可能解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接