Tag: 表示

使用Promise保存多个文件

我有一个节点URL(使用Express创build),可用于下载地址的静态图像。 因此,调用应用程序调用/下载url,并使用json传递多个地址,然后下载服务将调用Google Maps,并将每个addreses的静态图像保存在节点服务器上(然后将其发送callback用应用程序,但为了这个问题的目的,我只有在节点服务器保存图像感兴趣)。 最初,我们只关心保存地址的卫星视图,所以我写了这个代码 var request = require('request'); function saveMap(addressJson) { return Promise.all( //iterate over address json, get each address, call the Google Maps URL and save it. addressJson.map(function(item) { return new Promise(function (resolve, reject) { var mapUrl = 'http://maps.googleapis.com/maps/api/staticmap?maptype=roadmap&markers=size:mid|color:red|' + item.address; request(mapUrl) .pipe(fs.createWriteStream('/temp/' + item.id + '.jpg')) .on('finish', function () { resolve("Promise resolved"); }).on('error', […]

done()完成与Javascript承诺中的catch()完全相同的事情(使用sequelize和bluebird)?

我试图让我的Express应用程序尽可能相似地处理所有请求。 我有一个服务器,处理所有的callback和厄运金字塔是可怕的。 我也很难确保所有的电话都有回应。 所以我正在迁移到基于Promise的系统(sequelize,它利用蓝鸟的承诺库)。 我读过最好总是跟进一个.catch(function(err){ report it }调用。 .done()完成相同的事情? 我的想法(可能是天真的)是,我可以在.done(success, failure)函数中处理所有res.status(x).send(y)调用。 failure抓住一切catch()会(? 在done()函数中发送所有响应是否错误(所有成功消息都success ,所有失败/错误消息failure ? 编辑 – 我发现sequelize使用蓝鸟的诺言库,所以done()已被depricted finally() 。 但是, finally()没有在函数中使用参数,所以似乎我不能将所有数据发送到finally()并在那里处理它。

Express中间件没有被调用

我正在使用快速路由器在我的应用程序中build立路由,我正在尝试将自定义中间件应用到每个路由,因此只有在为特定路由器命中URL时才会调用中间件。 这是我的代码: const express = require('express'); const router = express.Router(); const authentication = require('./helpers/authentication'); const registerController = (app, path, router, middleware) => { middleware.forEach((routerMiddleware) => { router.use(routerMiddleware); }); app.use(path, router); }; const testMiddleware = (request, response, next) => { console.log(request.originalUrl); next(); }; module.exports = { init: (app) => { registerController(app, '/auth', require('./authenticationController'), [testMiddleware]); registerController(app, '/customer', […]

通过express获取错误:发送后无法设置标题

我正在创build快速应用程序,并在路由器中,我要从mongodb中获取数据。 这是我的代码 router.get('/', function(req, res, next) { MongoClient.connect(url, function(err, db) { db.collection('school').find({}).toArray(function(err, doc) { assert.equal(null, err); assert.ok(doc != null); res.render('index', { title: 'iGyan.org', schools: doc}); }); db.collection('students').find({}).toArray(function(err, doc) { assert.equal(null, err); assert.ok(doc != null); res.render('index', { title: 'iGyan.org',students: doc}); }); db.close(); }); }); 当我运行代码,并在浏览器中打开一个url,它给我错误的控制台说明 Error: Can't set headers after they are sent. 我已经看到几乎所有build议的问题在堆栈溢出问题,但不能得到帮助。 我知道这个错误是因为我在函数中渲染了两次,但不知道如何克服这种情况。

将快速应用传递给路由文件

我正在写没有前端代码的快速4 api服务器。 我select构build我的项目,以便文件夹结构基于项目的业务逻辑,而不是基于文件types(路由,模型等) 例如,我的用户文件夹有我的userRoutes.js,userModel,js,userApi.js,… 我的主要问题是,我应该如何将应用程序传递到我的路线文件? 我最喜欢的做法是做global.app并使其成为全球,但我听说这不是最佳做法。 如果您对我的业务逻辑结构有任何build议,那也会很棒。

无法获取Node.js Express代码在Cloud 9中说'Hello World'

一直在尝试使用Cloud 9,并试图使用Express网站上的示例代码来获得“Hello World!”。 我尝试通过https://docs.c9.io/docs/run-an-application监听几个不同的端口/ ip,并使用云9IDE中的Node js Express运行Hello World 。 尽pipe侦听器会运行,但在此之后它将不会closures或返回任何东西。 有谁知道为什么这可能是? 这是我的代码: var express = require('express'); var app = express(); app.get('/', function (req, res) { res.send('Hello World!'); }); app.listen(process.env.PORT, process.env.IP, function(){ console.log('LISTENING'); });

dynamic创build帕格(翡翠)内的元素

我正在尝试dynamic创build帕格模板中的元素。 我使用基本命令从数据库中检索信息 db.component.findAll().then(function(component){ res.render('stock' ,{ table:component}) }) 内容应该被创build的模板是 .tbl-content table(cellpadding='0', cellspacing='0', border='0') tbody – row in table tr td= "#{row.name}" td= "#{row.storage}" 我已经检查了语法,它应该是正确的,但结果是完全错误的。 它将row in table作为string,例如内容显示在页面上,与"#{row.name}"和"#{row.storage}" 我是用一些过时的语法还是我的方法完全错误? 谢谢!

在为React-Router提供静态文件时,使用Express JS将数据发送到路由

我想要实现的:使用Express JS制作的可以获取数据的路由(例如: https : //tmi.twitch.tv/group/user/instak/chatters ),通过React Router发送到我的正确路由路由并使React等待,直到数据被提取,这样我就可以使用这些数据来处理客户端。 我试过了 server.js 'use strict'; const express = require('express'); const app = express(); const path = require('path'); app.use(express.static(path.resolve(__dirname, '..', 'instakbot-client'))); // Always return the main index.html, so react-router render the route in the client app.get('*', (req, res) => { res.sendFile(path.resolve(__dirname, '..', 'instakbot-client', 'index.html')); }); app.get('/home', (req, res) => { […]

Node.js Morgan日志中没有请求状态

我正在Azure VM上运行node.js应用程序(使用PM2处理负载平衡和重新启动)。 这是服务器设置和日志logging代码: var logger = require('morgan'); var app = express(); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(flash()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes); app.use('/api/v01', api.router); app.use('/api/v02', apiv2.router); 在最后一天左右,我们开始有很多连接到网站的麻烦。 它需要一些重新加载才能显示任何数据。 我一直在查看日志,试图找出是什么。 我没有看到任何错误,但是这样的事情有不less例子: WebApp-2 GET /portal – – ms – – WebApp-3 GET /portal – – ms – – WebApp-2 GET […]

path在app.use()和app.get()

当我在/foo上做GET请求时,我的请求是通过例A中的第一个中间件函数传递的,但是在例B中跳过了吗? 例子A GET'/ foo“ app.use('/', function(req, res, next) { console.log("req passes through here"); next(); } app.get('/foo', function(req, res, next) { console.log("then req passes through here"); } 例子B GET'/ foo“ app.get('/', function(req, res, next) { console.log("this part is bypassed…"); next(); } app.get('/foo', function(req, res, next) { console.log("then req passes through here"); } app.use()和app.get()使用相同的path参数。 那么在例子B中,中间件如何安装在/不在执行?