Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express试图从错误的文件夹中提取资产_Javascript_Node.js_Express_Ejs - Fatal编程技术网

Javascript Express试图从错误的文件夹中提取资产

Javascript Express试图从错误的文件夹中提取资产,javascript,node.js,express,ejs,Javascript,Node.js,Express,Ejs,在我的express项目中,当我使用id呈现产品路线时,资产会尝试从公用文件夹中的/products加载(产品不存在),但当我从/franchino路线上稍微不同的模板呈现相同的html时,它会正确地从公用文件夹中提取资产 发生了什么事,我该怎么解决 不起作用的路线 router.get('/product/:slug', function(req, res) { //route params var slug = req.params.slug; var pro

在我的express项目中,当我使用id呈现产品路线时,资产会尝试从公用文件夹中的/products加载(产品不存在),但当我从/franchino路线上稍微不同的模板呈现相同的html时,它会正确地从公用文件夹中提取资产

发生了什么事,我该怎么解决

不起作用的路线

router.get('/product/:slug', function(req, res) {
    //route params
      var slug = req.params.slug;
      var productResp; //scope up api response to pass to render()
      console.log(slug);
    //api call
      Prismic.api("https://prismic.io/api").then(function(api) {
        return api.getByUID('product' , slug);
      }).then(function(response) {

        res.render('product-template', {
          product: response,
        })

      }, function(err) {
        console.log("Something went wrong: ", err);
      });
    });
错误:

GET /product/include/rs-plugin/js/extensions/revolution.extension.migration.min.js 404 0.843 ms - 1226
GET /product/include/rs-plugin/js/extensions/revolution.extension.parallax.min.js 404 1.069 ms - 1226
有效的路线:

router.get('/franchino', function(req, res) {
  res.render('index-rest');
});
App.js

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.static(path.join(__dirname, 'public')));
文件结构:

project 
   app.js
   routes
      index.js
   views
      snippets
         snippets
      all templates
   public
      css
      includes 
      js
      etc...

看起来只要有多层路线,即
/products/toys

默认资产提取行:
app.use(express.static(path.join(uu dirname,'public'))需要更改为
app.use('/toys',express.static(uu dirname+'/public')以反映路线


Per:

在这里更改路由
router.get('/api/product/:slug',function(req,res){
console.log(slug);
给你什么?Is
console.log(“出错:,错误);
调用了吗?如果你调用
console.log(响应)会发生什么;
?我不知道为什么会发生这种情况,但将
放在所有导入的前面是有效的。它认为/products是一个公共文件夹。如果有人能解释原因,我会接受答案。我认为
:slug
部分只允许匹配路径的单个组件。因此它将与
一起工作http://www.example、 com/product/my slug
但不是
http://www.example.com/product/include/my-slug
。但我无法解释为什么
express.static
失败。您的文件系统图显示
app.js
位于
项目
目录中,因此
\uu dirname
应该是
项目
目录和
路径.join(\uuuu dirname,'public')
应该是
project/public
。如果你用
\uuuu filename
而不是
\uuuu dirname
,这是有意义的。但这是个谜。谢谢!这解决了它(至少对我来说)。但肯定还有其他解决方案。如果我有5个端点(
/product/:option
/service/:option
/worker/:option
/queue/:option
/dabase/:option
)和5个资产文件夹(
/crm
/images
/js
/css)…然后我必须将其映射30次!!!
应用程序。使用(express.static(
/crm>/crm>/crm+))
app.use(express.static('product',express.static('dirname+/crm'));
app.use('product',express.static('dirname+/crm'));
app.use('product',express.static('dirname+/images'));
app.use('service',express.static('dirname+/crm'));/code>.use('。。。