Tag: 表示

调用之间的req.params更改

我在glitch.me上写了一个小的node.js应用程序,并遇到了我不太了解的问题。 这是一个留言板(一个freeCodeCamp项目),你可以在这里发布一个线程(指定一个板子),然后看板子上的消息列表。 线程存储在mongodb集合中。 董事会的名称通过req.params.board访问。 问题是,在两个函数调用之间, req.params.board以某种方式获取1个符号较短。 这里是我的路由文件和我的处理程序(在一个单独的模块),并在处理程序有console.logs,将告诉你我的意思。 假设我们在“newBoard”板上创build一个post: api.js module.exports = function (app) { app.route('/api/threads/:board') .get(threadHandler.getThreads) .post(threadHandler.postThread) .delete(threadHandler.deleteThread) .put(threadHandler.reportThread) app.route('/api/replies/:board') .post(threadHandler.postReply) .get(threadHandler.getReplies) .delete(threadHandler.deleteReply) .put(threadHandler.reportReply) }; 处理: module.exports.postThread = function(req, res){ console.log(req.params.board); //logs newBoard var newThread = new Thread({ text: req.body.text, delete_password: req.body.delete_password, created_on: new Date(), bumped_on: new Date(), reported: false, replies: [], replycount: 0, board: […]

为什么我得到ReferenceError:响应没有定义?

我用express来使用node.js。 我试图build立一个基本的服务器,但不知道为什么我得到一个响应错误。 var http = require('http'); var myServer = http.createServer(function(req,res){ response.writeHead(200, {"Content-Type" : "text/plain"}); response.write('Hello World'); response.end(); }); myServer.listen(3000);

使用Expressredirect和渲染

当我打我的API,我想redirect我的url从https://myapp.herokuapp.com/token/aaa.bbb.ccc到https://myapp.herokuapp.com/messages/:id 。 我也想渲染我的message视图 码: app.get('/token/:id' , (req, res) => { var decoded = jwt.verify(req.params.id, 'blabla'); Message.findById(decoded.messageId, (err, message) => { if (err) res.json({error: err}) res.render('message', {message}) }) }) 在这里,我成功地呈现了我的message视图,但下面的API的URL仍然是https://myapp.herokuapp.com/token/aaa.bbb.ccc而不是https://myapp.herokuapp.com/messages/:id 另一个尝试: app.get('/token/:id' , (req, res) => { var decoded = jwt.verify(req.params.id, 'blabla'); Message.findById(decoded.messageId, (err, message) => { if (err) res.json({error: err}) res.redirect('/messages/'+message._id) }) }) 现在,该URL是https://myapp.herokuapp.com/messages/:id但message视图不会呈现。 呈现JSON以显示消息 […]

使用Express中的参数在URL上提供静态文件

我正在使用Express的把手模板引擎。 当不带参数的端点时,所有的静态文件都被提供。 当包含参数时情况并非如此。 app.engine('.hbs', hbs(handlebarsOptions)); app.set('view engine', '.hbs'); app.use(express.static('public')); 这是我正在尝试使用的端点。 app.get('/projects/:name', function(req, res) { if(req.params.name === 'batteryapp') { res.render('project', {name: 'BatteryApp'}); } }); 我已经看到一个例子,如果你使用res.sendFile(),显然工作。 但是,使用模板引擎时必须使用res.render()。

如何使用Express和Node仅在POST上添加中间件

我有一个中间件,只有在http方法发布后才能应用。 以下工作正常,但我觉得有一个更好的办法: 'use strict' const express = require('express'), router = express.Router() router.use((req, res, next) => { if (req.method === 'POST') { // do stuff } return next() }) module.exports = router 我想要做这样的事情,但它不起作用: 'use strict' const express = require('express'), router = express.Router() router.post((req, res, next) => { // do stuff return next() }) module.exports = router

在ExpressJS中将参数从路由器传递到控制器

我有一个定义如此的路线 router.route('/:id/organisers').get(HackathonControllers.getHackathonRoles()); 现在, getHackathonRoles是一个定义如下的控制器: function getHackathonRoles(role, req, res, next) { console.log(role); res.status(200).json({ message: `Successfully updated Hackathon ${hackathonId}, published status updated to ${hackathonPublishedStatus}` }) } 我理想要做的是通过定义多个路由器端点来传递angular色。 就像是: router.route('/:id/organisers').get(HackathonControllers.getHackathonRoles(role='organiser')); 和 router.route('/:id/volunteer').get(HackathonControllers.getHackathonRoles(role='volunteer')); 所以基本上我想重用getHackathonRoles方法,并希望避免为不同的angular色重写相同的方法。 理想情况下,我应该能够在控制器中的console.log(role) 。 截至目前,这失败了,我得到的错误: router.route('/:id / organizers')。get(_hackathonController2.default.getHackathonRoles(role ='organizer')); 我该如何解决这个问题,并保持干爽? 我不想将参数合并到像/:id/?这样的端点中 参数就像role=organiser或role=volunteer等

Express res.redirect不redirect

我在快速使用res.redirect()时遇到了麻烦。 我曾试着寻找其他问题,但答案并不能真正涵盖我的具体问题,或者至less是不够的。 app.get(/\d\w*/g, function (req, res, next) { urlCreator.findURL(req.originalUrl,function(smallURL){ if (smallURL === "Small URL doesn't exist"){ res.send(smallURL); } else { res.redirect(smallURL); } }); }); 当else块中的res.redirect()达到时,我在浏览器(下面的屏幕截图)中得到这个,而不是redirect到所需的页面。 smallUrl的格式是例如“www.facebook.com” 浏览器响应 我是否错过了为什么浏览器不会简单地redirect并显示这个呢?

如何从Node.Js Express中的发布数据接收(并解码)JSON?

假设我用以下代码发送了数据: $.ajax({ type: "POST", url: "/save/" + #{key}, data: transitions2, success: function (data) { }, dataType: "json" }); 其中transitions2是分层的JS对象。 现在我怎样才能在服务器端完整地收到它 router.post('/save/:key', function(req, res) { // where is my data here? }); UPDATE 我find了关于body parser的信息,发现我的网站模板已经包含了它们。 特别是, app.js包含: … var bodyParser = require('body-parser'); … // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.json()); […]

如何在输出前禁用res.writeHead()输出额外的数字?

我用express创build一个http服务器。 以下是服务器代码: router.get('/', function(req, res, next) { // req.socket.setTimeout(Infinity); res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8', // <- Important headers 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', }); res.write('hell'); res.write('world'); res.end(); // res.write('\n\n'); // response = res; }); 当我使用netcat来获取url。 输出是这样的 GET /sse HTTP/1.1 HTTP/1.1 200 OK X-Powered-By: Express Content-Type: text/plain; charset=utf-8 Cache-Control: no-cache Expires: 0 Connection: keep-alive Keep-Alive: timeout=5, max=97 […]

从Req.User()获取信息到ExpressJS中的Req.params()

在用户login到我的Express应用程序之后,我想将它们redirect到一个url,其内容如下: www.mysite.com/:user 我遇到麻烦的是,当人们在login后req.params ,我的req.params对象将作为一个空对象文字出现。 理想情况下,我想要做的是以req.user存储的信息,并将一些信息传递到URL中。 所以基本上我想从这里得到: router.post('/login', passport.authenticate('local', {successRedirect:'/', failureRedirect: '/login', failureFlash: true})); 到这里: router.get('/:user', function(req, res) { //stuff } login后, req.user对象读取如下所示: { username: joesmith@mail.com, name: Joe Smith, password: dkei348#$kDL^583L, formulas: [] } 我试图使用的代码如下所示: router.get('/:user', function(req, res) { var user = req.user.name; req.params = { "user": user } 但这是行不通的,因为最初req.user.name是未定义的,如果有人还没有login,所以我不能通过控制台错误。 显然我不明白如何req.params生成足够的细节来解决这个问题。 谢谢。