Tag: 表示

不寻常的行为在testing:node.js / Mocha

我最近跳入nodeJS,并开始使用Express&Wagnor构build中间件应用程序 下面是我的package.JSON { "devDependencies": { "gulp": "3.8.11", "gulp-mocha": "2.0.1", "mocha": "2.2.4", "superagent": "1.2.0", "wagner-core": "0.1.0" }, "dependencies": { "underscore": "1.5.2", "mongodb": "2.2.10", "express": "", "http-status": "0.1.8", "mongoose":"" }, "scripts": { "test": "mocha test.js" } } 我被困在一个非常特殊的情况下,search类似的事件报告,但没有得到任何相关的。 我确信我犯了一个愚蠢的错误,需要帮助来识别它。 这里是情况,我有一个基本的中间件设置6个端点,我正在testing使用摩卡。 我有一个test.js文件与6testing和问题是,当我运行它通过一次失败的另一次,然后再次通过没有任何干预env或代码或testing。 这让我非常担心,天气我的应用程序将在生产中performance类似,或者是一个testing相关的问题或已知的摩卡问题(找不到任何)。 以下是我的testing文件 var URL_ROOT = 'http://localhost:3131'; var express = require('express'); var wagner = require('wagner-core'); var assert […]

如何res.send Node.js / Express中的一个新的URL?

给定一个GET请求到URL X,你应该如何定义res.send,以便它提供一个完全独立的URL Y的响应? 即 app.get('/', function (req, res) { res.send to a new URL external of the app ('Success') }); 对于这个话题的无知,先谢谢,并且提前道歉!

Express.js:从路由处理程序调用下一个(错误)是否调用全局error handling中间件?

比方说,我已经定义了以下中间件和路由处理程序: app.use(function(err,req,res,next) { res.status(500).send('Something broke!'); }); app.get('/test',function(req,res) { //some error happens here, and ther "error" object is defined next(error); }); error handling中间件得到调用吗? 如果不是的话,error handling中间件会被调用 error handling中间件是在路由处理器之下定义的? 我使用throw error; 而不是下next(error); ? 以上都是真的吗? 或者我应该这样做: //route.js module.exports=function(req,res,next) { //error happens here next(error); } //errorHandler.js module.exports=function(err,req,res,next) { res.status(500).send('Something broke!'); } //app.js var route=require('route'); var errorHandler=require('erorHandler'); app.get('/test',[route,errorHandler]); 我现在有点困惑…

状态码304(Jade,Node,Express)

我在我的翡翠文件中链接bootstrap和jquery, link(rel='stylesheet', href='/stylesheets/bootstrap.css') 和 script(src='/javascripts/jquery-3.1.1.js') script(src='/javascripts/bootstrap.js') 这个Jade文件在我的视图文件夹中。 boostrap css是在我的公共/ stylesheets文件夹和JavaScript是在公共/ javascripts文件夹。 当我使用nodemon运行我的应用程序时,它说 GET / 200 80ms – 1.65kb GET /stylesheets/bootstrap.css 304 1ms GET /javascripts/jquery-3.1.1.js 304 3 GET /javascripts/bootstrap.js 304 2ms javascript和css文件不会加载。 build议?

什么时候使用快速会话创build一个cookie?

我在一个项目中使用快速会话,并且很努力的去理解它何时在浏览器上创build一个cookie来与会话存储一起使用。 在我的项目中,当我请求我的主页(“/”)时,不会创buildcookie,但是当我请求任何其他页面时,会创build一个cookie。 如果我远离主页(即“/ user / signup”),请从浏览器中删除cookie,然后返回主页,但不会为会话存储创buildcookie。 我的问题是理解为什么它会为除主页以外的其他请求创build一个会话cookie。 var app = express(); app.use(express.static(path.join(__dirname, 'public'))); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(validator()); app.use(cookieParser()); app.use(session({ secret: 'mysupersecret', resave: false, saveUninitialized: false, store: new mongoStore({ mongooseConnection: mongoose.connection }), cookie: {maxAge: 180 * 60 *1000} })); app.use(flash()); app.use(passport.initialize()); app.use(passport.session()); app.use('/user', userRoutes) app.use('/', indexRoutes); router.get('/', function(req, res, next) { Product.find(function(err, docs){ […]

使用Mongoose来更新数组中的子文档

有一些关于这个( 这里和这里 ,例如)的post,但没有一个使用本地mongoose方法。 (第一个使用$set ,第二个使用extend npm包,好像应该有一个“native mongoose”的方法来做到这一点。 架构: var blogPostSchema = new mongoose.Schema({ title: String, comments: [{ body: String }] }); 这是我最初的尝试: BlogPost.findById(req.params.postId, function (err, post) { var subDoc = post.comments.id(req.params.commentId); subDoc = req.body; post.save(function (err) { if (err) return res.status(500).send(err); res.send(post); }); }); 问题是这一行: subDoc = req.body实际上并没有改变父文档的subDoc,而是通过引用传递。 save()调用后,数据库中没有任何变化。 extend包通过将两个对象合并在一起来解决这个问题,如上面链接的第二个SOpost所示(以及在这里 )。 但是有没有办法解决这个使用一些Mongoose的API方法? 我找不到有关它的任何文档(只有如何添加新的子目录和删除子目录)。 我写的一个select是这样的: for […]

Node.js Express unhandledRejection removeListener

我在快速应用程序中有一些error handling,用于asynchronous/等待function,即。 试图集中处理未被捕获的错误,以适当的状态代码/消息进行响应。 我正在这样做: const handleRejection = (res, reason) => { const { code, message } = reason console.trace() logger.error(reason) // use `res` to send response to client } app.use((req, res, next) => { process.on('unhandledRejection', handleRejection.bind(this, res)) next() }) process.on('SIGTERM', () => process.removeListener('unhandledRejection', handleRejection)) 这适用于捕获/处理错误,但是,每次触发错误时,我的日志都会被填满。 我不相信这个事件监听器, process.on('unhandledRejection') ,正在被正确删除… 有这个解决scheme吗?

Router.use()需要中间件function

我使用快递服务angular度的HTML文件。 我想testingangular度是否可以从快递后端获取数据。 app.component.html <h1> {{title}} </h1> <a class="button" href="/Books/getall">Get all books</a> server.js const express = require('express'); var app = express(); var staticRoot = __dirname; app.set('port', (process.env.PORT || 3000)); var bookRouter = require('./bookController'); app.use(express.static(staticRoot)); app.get('/', function(req, res) { res.sendFile('index.html'); }); app.use('/Books', bookRouter); app.listen(app.get('port'), function() { console.log('app running on port', app.get('port')); }); bookController.js var express = require('express'); […]

无法读取未定义的属性“发送”

我试图从外部脚本发送数据到路由器,并返回错误TypeError: Cannot read property 'send' of undefined 这是代码 app.js var Cake = require('./modules/cake'); router.get('/cakes', function(req, res) { Cake.getCake(); }) cake.js module.exports = { getCake: function (req, res) { request({ url: "http://get.cakes/json", json: true }, function (error, response, body) { if (!error && response.statusCode == 200) { res.send(body); } }); } }; 请注意, http://get.cake/不是真正的网站。 这个问题无关紧要。

如何在Node / Express路由和Socket.io之间进行通信

我想使用socket.io跟踪应用程序的日常活动用户。 我的套接字连接如下所示: let visitorData = {}; io.on('connection', (socket) => { socket.on('user', (data) => { visitorData[socket.id] = data; }) socket.on('disconnect', () => { delete visitorData[socket.id] }) }) 我希望能够将现有的Node / Express 路由和接收到的数据合并到套接字连接中。 特别是,我将如何处理POST到/login端点以将login用户名与套接字id连接相关联。 例如: app.get('/login', (req, res, next) => { const someSocket = /* socket */ const someSocketId = /* socket id */; visitorData[someSocketId] = req.body.username; someSocket.emit('user', […]