Tag: 表示

Express 4 + Angular 2 HTML 5路由问题

我正在使用Express 4和Angular 2制作一个基本的Web应用程序。在这里,除了使用HTML 5路由器之外,没有什么特别的Angular 2。 这是应用程序的路由工作stream程: 有两个主要的服务器端路由configuration的应用程序。 两者看起来类似这样: /* GET home page. */ router.get('/', authenticationHelpers.isAuth, function(req, res, next) { res.render('index'); }); /* GET login page. */ router.get('/login', authenticationHelpers.isNotAuth, function(req, res, next) { res.render('login'); }); 这些pipe理显式地pipe理用户路由到/和/login的两种情况。 但是,如果用户login并能够访问/呈现索引快速视图,则可以使用HTML5路由。 这些包括如下的url: localhost:5000/user localhost:5000/profile localhost:5000/profile/settings 问题 显然,没有router.get('/user') ,不应该有,因为这是Angular 2路由器完成的所有前端工作。 但是,要启用允许用户简单键入localhost:5000/profile/settings ,并让站点将您路由到索引文件(假设您已经login),然后路由您(使用angular2的HTML 5路由)到你自己的/profile/settings我必须把这段代码放在我的app.js : app.all("/*", function(req, res, next) { res.render('index'); }); […]

Express静态服务器 – 设置dir文件夹

我创build简单的快递静态服务器。 app.get("/media/:filename/" ,express.static(__dirname + /media/)); 我的问题是,如果我想从服务器获取文件,该文件需要在媒体/媒体文件夹下。 我知道我可以写 app.get("/media/:filename/" ,express.static(__dirname)); 它会工作,但我寻找另一个解决scheme,我不必创build根文件夹为静态服务器根。 我虽然使用redirect到另一个path,但我认为这不是很好的解决scheme..

nodeJSvideostream,当用户断开或移动到不同的页面时,连接不会closures

我正在使用express来build立nodeJS中的videostream服务器,并使用“request-progress”模块来获取进度状态。 这是(videostream)正常工作。 但问题是,即使我closures浏览器或移动到下一页后,服务器仍然stream数据。 我可以在控制台中看到。 这里是相同的代码: app.route('/media/*').get(function (req, res) { var originalUrl = "http://myactualserver.com"; var resourceUrl = originalUrl.split('media'); var requestURL = BASE_URL + resourceUrl[1]; req.on('close', function () { console.log('Client closed the connection'); }); var options = {}; progress(request(requestURL), { throttle: 1000, delay: 0, lengthHeader: 'content-length', }) .on('progress', function (state) { console.log('progress', state); }) .on('error', function (err) […]

如何为中间件编写TypeScript定义,将属性添加到响应中?

我想用TypeScript的快递来expression快感。 它缺乏types,所以我想写我自己的。 只是让它编译是微不足道的。 这个中间件装饰物业boom的res物体(来自繁荣模块 ): var express = require('express'); var boom = require('express-boom'); var app = express(); app.use(boom()); app.use(function (req, res) { res.boom.notFound(); // Responsds with a 404 status code }); 但与打字稿我需要把它,因为无论http.ServerResponse和Express.Response有兴旺的属性,当然: return (<any>res).boom.badRequest('bla bla bla'); 最干净的方法是干什么? 哪些是其他types的中间件,正在做类似的事情?

PassportJS和Express 4不正确保存Cookie /会话

我有一个使用Express 4与护照0.3.2的应用程序。 我build立了一个passport-local策略,当/session端点发送用户名和密码时,获取正确的用户信息。 但是,用户信息永远不能正确保存。 因为这样的req.user在所有监听器中都是未定义的,而req.isAuthenticated()总是返回false。 我已经看到其他职位,经常发现与中间件设置的顺序问题,但我已经命令他们以正确的方式,所以我不知道该从哪里去。 这是我的POST监听器/session : app.post("/session", passport.authenticate('local'), (req: any, res: any) => { // if we reach this point, we authenticated correctly res.sendStatus(201); } ); 这是我的LocalStrategy设置: passport.use(new LocalStrategy( (username, password, done) => { let users = userRepository.getAll(); let usernameFilter = users.filter(u => u.getUsername() === username); if (!usernameFilter || usernameFilter.length !== 1) { […]

在Nodejs / Express中链接承诺的最佳实践

我知道在Nodejs / Express中链接promise的最佳方式是: doSomeThing() .then() .then() .catch(); 但最近不得不使用async和q模块遍历列表/数组并运行asynchronous函数。 我想知道是否有更好的方式来做/写这个 – var deferred = Q.defer(); var deferred2 = Q.defer(); models.Local.findOne({ where: { id: parseInt(req.body.localid) } }) .then(function(resultLocal){ if(!resultLocal){ return res.status(404).json( { "status" : "error", 'error': "Local Not Found" }); } return models.Documents.create(req.body.document); }) .then(function(docCreated){ var attributes = req.body.document.Attributes; async.each(attributes, function(item, callback) { models.Doc_Tags.create({ value: item.value, attribute_id: […]

Package express-ws不允许客户连接

我有一个express-ws npm包定义的快速路由器。 路由器的外观如下所示: //ws.js var express = require('express'); var router = express.Router(); var connections = {}; router.ws('/connect/', function (ws, req) { // console.log(ws); ws.on('close', function(x, y, z) { console.log(a, b, c); }); }); module.exports = router; 快速应用中的(不是全部)语句是(并按顺序): //app.js var app = express(); var expressWs = require('express-ws')(app); var index = require('./routes/index'); var ws = require('./routes/ws'); … […]

为什么res.send被调用两次?

我正在为快速路由器创build一个中间件,它将为每个请求和响应执行一些代码。 拦截一个请求很容易,有很多例子,但我还没有find任何东西拦截响应的优雅方法。 经过一番研究,我所想到的最好的方法就是replace响应对象的发送函数,如下面的代码片段所示: const express = require('express'); const app = express(); var router = express.Router(); var port = process.env.PORT || 3000; router.get('/test', function(req, res) { res.send({ message: "testing" }); }); app.use(function(req, res, next){ console.log("INTERCEPT-REQUEST"); const orig_send = res.send; res.send = function(arg) { console.log("INTERCEPT-RESPONSE"); orig_send.call(res, arg); }; next(); }); app.use("/api", router); app.listen(process.env.PORT || 3000) && console.log("Running"); […]

如何确保只有特定的域可以从您的REST API查询?

我有一个具有REST API的应用程序。 我希望它能够对REST API进行的唯一请求是源自应用程序本身的请求。 我怎样才能做到这一点? 我也使用了一个node.js + express服务器。 编辑:该应用程序完全是一个公共Web应用程序。

客户端无法findsocket.io.js

我已经阅读了关于这个主题的所有其他post,但我找不到我的问题的答案。 我有Express服务器运行在默认端口或5000 (process.env.PORT || 5000) 。 然后我添加了socket.io但客户端无法findsocket.io.js文件。 经过一些testing后,我认为有一些端口冲突问题。 这是我的服务器端代码: var express = require('express'), app = express(), bodyParser = require('body-parser'), server = require('http').createServer(app), io = require('socket.io').listen(server); app.set('port', (process.env.PORT || 5000)); 编辑:客户端的东西: 编辑2:另外,我不认为这是重要的,但我在Heroku本地进行testing。 编辑3:目录结构: –api –images –node_modules –scripts –pages main_page.ejs –styles composer index.js npm-debug package 编辑4:凹凸