首页 \ 问答 \ 无法使用nodejs进行GET?(Cannot GET with nodejs?)

无法使用nodejs进行GET?(Cannot GET with nodejs?)

我有一些简单的nodejs应用程序与一些用户。 我想使用URL localhost / users /(username)加载特定的用户配置文件,但是当我尝试加载URL时出现此错误:

Cannot GET /users/test

这是我的用户页面的user.js路由文件:

var express = require('express');
var router = express.Router();
var User = require('../models/user');

// GET user by username
router.get('/users/:username', function(req, res) {
  var username = req.params.username;
  res.send(req.params);
  res.render('user');
});

module.exports = router;

我在我的视图文件夹中有一个user.handlebars文件,所以它应该加载文件。 我在路线文件中缺少什么? 任何帮助将不胜感激。 谢谢!!

编辑:app.js:

console.log('Starting app.js');

const fs = require('fs');
const _ = require('lodash');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const exphbs = require('express-handlebars');
const expressValidator = require('express-validator');
const flash = require('connect-flash');
const session = require('express-session');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const mongo = require('mongodb');
const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/tipcup');
var db = mongoose.connection;

const routes = require('./routes/index');
const users = require('./routes/users');
const user = require('./routes/user');

// Init App
var app = express();

// View Engine
app.set('views', path.join(__dirname, 'views'));
app.engine('handlebars', exphbs({defaultLayout: 'layout'}));
app.set('view engine', 'handlebars');

// BodyParser middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false}));
app.use(cookieParser());

// Set Static Folder
app.use(express.static(path.join(__dirname, 'public')));

// Express Session
app.use(session({
  secret: 'secret',
  saveUninitialized: true,
  resave: true
}));

// Passport Init
app.use(passport.initialize());
app.use(passport.session());

// Express Validator
app.use(expressValidator ({
  errorFormatter: function(param, msg, value) {
    var namespace = param.split('.')
    , root = namespace.shift()
    , formParam = root;

    while(namespace.length){
      formParam += '[' + namespace.shift() + ']';
    }
    return {
      param: formParam,
      msg: msg,
      value: value
    };
  }
}));

// Connect Flash
app.use(flash());

// Global Vars
app.use(function (req, res, next){
  res.locals.success_msg = req.flash('success_msg');
  res.locals.error_msg = req.flash('error_msg');
  res.locals.error = req.flash('error');
  res.locals.user = req.user || null;
  next();
});

app.use('/', routes);
app.use('/users', users);
app.use('/users/:username', user);

// Set Port
app.set('port', (process.env.PORT || 3000));

app.listen(app.get('port'), function(){
  console.log('Server started on port '+app.get('port'));
});

I have a simple nodejs app with some users. I want to load a specific user profile using a URL localhost/users/(username) but I'm getting this error when I try to load the URL:

Cannot GET /users/test

Here's my user.js routes file for the user page:

var express = require('express');
var router = express.Router();
var User = require('../models/user');

// GET user by username
router.get('/users/:username', function(req, res) {
  var username = req.params.username;
  res.send(req.params);
  res.render('user');
});

module.exports = router;

I have a user.handlebars file in my views folder so it should load the file. What am I missing in my routes file? Any help would be greatly appreciated. Thanks!!

EDIT: app.js:

console.log('Starting app.js');

const fs = require('fs');
const _ = require('lodash');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const exphbs = require('express-handlebars');
const expressValidator = require('express-validator');
const flash = require('connect-flash');
const session = require('express-session');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const mongo = require('mongodb');
const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/tipcup');
var db = mongoose.connection;

const routes = require('./routes/index');
const users = require('./routes/users');
const user = require('./routes/user');

// Init App
var app = express();

// View Engine
app.set('views', path.join(__dirname, 'views'));
app.engine('handlebars', exphbs({defaultLayout: 'layout'}));
app.set('view engine', 'handlebars');

// BodyParser middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false}));
app.use(cookieParser());

// Set Static Folder
app.use(express.static(path.join(__dirname, 'public')));

// Express Session
app.use(session({
  secret: 'secret',
  saveUninitialized: true,
  resave: true
}));

// Passport Init
app.use(passport.initialize());
app.use(passport.session());

// Express Validator
app.use(expressValidator ({
  errorFormatter: function(param, msg, value) {
    var namespace = param.split('.')
    , root = namespace.shift()
    , formParam = root;

    while(namespace.length){
      formParam += '[' + namespace.shift() + ']';
    }
    return {
      param: formParam,
      msg: msg,
      value: value
    };
  }
}));

// Connect Flash
app.use(flash());

// Global Vars
app.use(function (req, res, next){
  res.locals.success_msg = req.flash('success_msg');
  res.locals.error_msg = req.flash('error_msg');
  res.locals.error = req.flash('error');
  res.locals.user = req.user || null;
  next();
});

app.use('/', routes);
app.use('/users', users);
app.use('/users/:username', user);

// Set Port
app.set('port', (process.env.PORT || 3000));

app.listen(app.get('port'), function(){
  console.log('Server started on port '+app.get('port'));
});

原文:https://stackoverflow.com/questions/48598516
更新时间:2022-04-21 06:04

相关问答

更多
  • 我不确定你是否仍然需要解决方案,但你可以检查一下: http : //jsfiddle.net/ft2PD/41/ 这是html
    这是javascript: $(document).ready(function(){ $('#div1,#div2').click(functi ...
  • 您可以使用jQuery检查目标是否为表单元素(因为您正在使用它),如果没有,则不要调用阻塞默认行为的恶意代码。 function keydown(e) { // Don't block arrow keys on form elements if( $(e.target).is(':input') ) { return; } for (var i = keys.length; i--;) { if (e.keyCode === keys[i]) ...
  • 有不同的情况: 如果使用TKinter或PyGame等图形前端,则可以将事件绑定到箭头键并等待此事件。 Tkinter的例子来自这个答案 : from Tkinter import * main = Tk() def leftKey(event): print "Left key pressed" def rightKey(event): print "Right key pressed" frame = Frame(main, width=100, height=100) main ...
  • Google TV样本上有一个名为WebAppNativePlayback的示例应用: https : //code.google.com/p/googletv-android-samples/source/browse/#git%2FWebAppNativePlayback 本质上,d-pad由本机应用程序使用,因此您需要处理它,如果您使用全屏WebView,则可以通过将相关键传入JS中来将其传递给WebView。 要注意的主要代码是: 在Activity中,使用关键事件并传递下来: /** * Thi ...
  • 我认为你的问题在于你的select(DecisionTableTable, int, boolean)方法。 我不确定被重写的setSelection\selectionChanged方法的确切影响,但它们似乎过于复杂。 你能不能只满足你的要求: private void select(DecisionTableTable viewer, int index, boolean reveal) { int count = viewer.getTable().getItemCount(); vi ...
  • 几乎所有终端上的箭头键都会发送转义序列。 如果程序处理箭头键,则通过注意到读取转义字符来执行此操作,并通过查找转义序列的其余部分进行跟进。 不期望转义序列的程序通常会使用默认的终端I / O模式,其中操作系统的终端驱动程序通常将转义字符作为^[ (因为在大多数键盘上,您可以通过这种方式键入转义字符)。 根据您的描述,听起来好像MyBayes不期望转义序列。 您应该能够使用终端发送的退格或删除( 擦除 )字符,而不是使用箭头键进行命令行编辑。 To fix this behaviour, installing ...
  • 好的,我发现了什么问题。 Keydown重复,与mousedown相反,因此在使用keydown时setInterval被设置多次。 在重复开始之前需要一段时间,这就是为什么之前的代码在短时间内按下时才起作用的原因。 以防万一有人想看到: 小提琴 。 无论如何,感谢阅读。 改进JS: $(document).ready(function () { "use strict"; var imgRow = $(".img-row-scroller"); var scrollBtnLeft ...
  • 我没有在这里收到任何回复,我将问题交叉发布到项目的GitHub存储库 。 显然,这个问题似乎与薄荷终端模拟器有关。 如果您使用ConHost仿真器安装Git Bash,问题就会消失。 Not having received any responses here, I cross-posted the question to the project's GitHub repository. Apparently, this issue seems to be related to the mintty ter ...
  • 开发人员可能不认为SeekBar是使用非触摸输入或TalkBack等可访问性服务来控制视频的合适组件。 你绝对可以实现一些适用于键盘的东西,至少对于桌面模式。 例如,即使SeekBar没有聚焦,YouTube.com也允许用户使用左/右箭头键向后/向前搜索。 SeekBar 也可以使用tab键,但在Android上,光标键也是可聚焦组件之间导航的合法功能,因此实现相同的UX更加困难。 另一方面,您也可以使用SeekBar控件进行其他可访问性考虑。 控制的一个关键部分是拖动能力 - 使用TalkBack你需要 ...

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)